https://ac.nowcoder.com/acm/contest/5773/B
给一些点的横纵坐标,问最多有多少不平行的直线,其实就是问有多少种斜率。
可以用map,也可以用set
map
#include<bits/stdc++.h> using namespace std; const int maxn=2e2; pair<double,double>p[maxn+5]; map<double,int>m; int main() { int n;cin>>n; for(int i=0;i<n;i++){ cin>>p[i].first>>p[i].second; } int cnt=0,flag=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(p[i].first==p[j].first)flag=1; else if(!m[(p[i].second-p[j].second)/(p[i].first-p[j].first)]){ m[(p[i].second-p[j].second)/(p[i].first-p[j].first)]=1; cnt++; } } } cout<<cnt+flag<<endl; return 0; }
set
#include<bits/stdc++.h> using namespace std; const int maxn=2e2; pair<double,double>p[maxn+5]; set<double>m; int main() { int n;cin>>n; for(int i=0;i<n;i++){ cin>>p[i].first>>p[i].second; } int cnt=0,flag=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(p[i].first==p[j].first)flag=1; else{ m.insert((p[i].second-p[j].second)/(p[i].first-p[j].first)); } } } cout<<m.size()+flag<<endl; return 0; }