题目大意:给出一系列点,要求找出共线的点数最大的值
解题思路:暴力,遍历每两个点确定的直线上又多少点, 每次更新最大值
三个点共线的性质:A(X1, Y1), B(X2, Y2), C(X3, Y3), 这个时候有(Y2 - Y1) / (X2 - X1) = (Y3 - Y2) / (X3 - X2)
最好转化成 (Y2 - Y1) * (X3 - X2) = (Y3 - Y2) * (X2 - X1)
#include <cstdio>
int main() {
int t, x[705], y[705];
char str[100];
scanf("%d\n\n", &t);
while (t--) {
int n, ans = 0;
for (n = 0; gets(str) && str[0] != '\0'; n++)
sscanf(str, "%d%d", &x[n], &y[n]);
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++) {
int count = 0;
for (int k = 0; k < n; k++)
if ((y[j] - y[i]) * (x[k] - x[j]) == (y[k] - y[j]) * (x[j] - x[i]))
count++;
if (count > ans)
ans = count;
}
printf(t ? "%d\n\n" : "%d\n", ans);
}
return 0;
}