标签:直线 延伸 div sub 注意 整数 amp oar subject
第1行: 输入1个正整数:N
第2..N+1行:第i+1行是两个用空格隔开的整数,为点i的坐标(Xi,Yi)
输出1个整数,为最多的互不平行的直线数目。
N≤200,−1000≤Xi?,Yi?≤1000
思路:枚举出所有的斜率,用set去重,注意用double类型
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<set> using namespace std; #define INF 0x3f3f3f3f const int maxn=1e6; double marr[maxn]; struct point { double x; double y; }arr[205]; double gradient(double x,double y,double w,double v) { double ans; if(x==w) { ans=INF; } else ans=(y-v)/(x-w); return ans; } int main() { int n; cin>>n; int i,j,k=0; for(i=0;i<n;i++) cin>>arr[i].x>>arr[i].y; for(i=0,j=1;i<=j&&j<n;) { marr[k++]=gradient(arr[i].x,arr[i].y,arr[j].x,arr[j].y); if(j==n-1) { i++;j=i+1; }else j++; } set<double>s(marr,marr+k); cout<<s.size()<<endl; return 0; }
标签:直线 延伸 div sub 注意 整数 amp oar subject
原文地址:https://www.cnblogs.com/adventurer-/p/12977464.html