UVa270

来源:互联网 发布:软件算人工挖土 编辑:程序博客网 时间:2024/06/08 14:16

给你N个点(N<700)

求最多在一条直线上的点。

枚举以每一个点为原点,求它与其他点的斜率,斜率相同则说明在同一条直线上。

只要枚举然后排序,最后求连续最长斜率相同的点就可以了。

AC代码:

#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int Arsize=701;struct Node{float x,y;};Node coordinate[Arsize];int max_node;double k_gradient[Arsize];int main(){int case_num,i,num_coordinate,j,k,num,m,l;char str[100];cin >> case_num;cin.get();cin.get();while(case_num--){i=0;max_node=0;while(gets(str)){if(!str[0])break;sscanf(str,"%f%f",&coordinate[i].x,&coordinate[i].y);i++;}num_coordinate=i;for(i=0;i<num_coordinate;i++){for(j=0,k=0;j<num_coordinate;j++){if(i!=j){k_gradient[k++]=(coordinate[i].y-coordinate[j].y)/(coordinate[i].x-coordinate[j].x);}}sort(k_gradient,k_gradient+k);for(k=0;k<num_coordinate-1;k++){for(m=k,l=k+1,num=2;k_gradient[m]==k_gradient[l];m++,l++,num++);if(num>max_node)max_node=num;}}cout << max_node;cout << endl;if(case_num)cout << endl;}return 0;}


原创粉丝点击