1 条题解
-
0
算法标签:
模拟
题解:
分别以每个点为基准,计算与其他点的斜率,将斜率排序后统计斜率最多的值。
#include <iostream> #include <algorithm> #include <cmath> using namespace std; const double esp = 1e-10; int x[800], y[800], N; double k[800]; int main() { while (cin >> N && N) { for (int i = 0; i < N; i++) { cin >> x[i] >> y[i]; } int ret = 0; for (int i = 0; i < N; i++) { int cnt = 0, cinf = 0; for (int j = 0; j < N; j++) { if (j != i) { if (x[j] == x[i]) { cinf++; } else { k[cnt++] = (y[j] - y[i]) * 1.0 / (x[j] - x[i]); } } } sort(k, k + cnt); int c = 0; ret = max(ret, cinf + 1); for (int j = 0; j < cnt; j++) { if (!j || fabs(k[j] - k[j - 1]) < esp) { c++; } else { ret = max(c + 1, ret); c = 1; } } ret = max(ret, c + 1); } cout << ret << endl; } return 0; }
- 1
信息
- ID
- 119
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者