洛谷 1142 轰炸 【判断点是否在同一条直线上】
程序员文章站
2022-04-01 17:29:44
...
传送门
// 思路: 就是问最多有多少个点在同一条直线上.
思路:肯定联想到用斜率或者向量的形式来求呀, 所以我们用向量方便一点, 我们任取两个点作为基准点, 算出一个向量(x1, y1), 然后枚举第三个点, 算第二个点和第三个点的之间的向量, 然后通过判断向量是否平行的方式来判断这三点是否处于同一直线上, 也就是 x1*y2 == x2*y1…. 复杂度O(n^3), 这题数据弱让我卡过去了, 也许这个OJ1s能跑1e9了? (逃
AC Code
const int maxn = 7e2+5;
pii po[maxn];
void solve()
{
int n;
scanf("%d", &n);
for (int i = 1 ; i <= n ; i ++) {
scanf("%d%d", &po[i].fi, &po[i].se);
}
int ans = 0;
for (int i = 1 ; i <= n ; i ++) {
for (int j = i+1 ; j <= n ; j ++) {
int cnt = 2;
int x1 = po[i].fi - po[j].fi;
int y1 = po[i].se - po[j].se;
for (int k = 1 ; k <= n ; k ++) {
if (k == i || k == j) continue;
int x2 = po[j].fi - po[k].fi;
int y2 = po[j].se - po[k].se;
if (x1*y2 == x2*y1) cnt++;
}
ans = max(ans, cnt);
}
}
printf("%d\n", ans);
}
上一篇: 【备份与恢复】创建备份集
下一篇: PHP图像处理开发库