题目的意思就是给出n个点的坐标,选出最多的点,在一条直线上。
就是连接任意两点得到一条线,然后遍历每个点,算出在这条线上点的数量
代碼:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s[1000];
int x[1000],y[1000];
int len;
void input() {
len=0;
while(gets(s)) {
if(!s[0]) break;
sscanf(s,"%d%d", &x[len],&y[len]);
len++;
}
}
bool isinline(int x1, int y1, int x2, int y2, int x3, int y3) {
return (x1-x2)*(y3-y2) == (x3-x2)*(y1-y2)?true:false;
}
int main() {
int n;
scanf("%d", &n);
getchar();
getchar();
while(n--) {
input();
if(len==1) {
printf("1\n");
if(n) printf("\n");
continue;
}
if(len==2) {
printf("2\n");
if(n) printf("\n");
continue;
}
int ans = 0;
int cnt = 0;
for(int i=0; i<len; i++) {
for(int j=i+1; j<len; j++) {
cnt = 2;
for(int k=j+1; k<len; k++) {
if(isinline(x[i],y[i],x[j],y[j],x[k],y[k])) {
cnt++;
}
if(cnt > ans) ans = cnt;
}
}
}
printf("%d\n", ans);
if(n) printf("\n");
}
return 0;
}