题解
2024-03-13 13:24:56
发布于:广东
39阅读
0回复
0点赞
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct node{
int x, y;
}a[1005];
bool cmp(node a, node b){
if(a.x == b.x) return a.y < b.y;
return a.x < b.x;
}bool check(node i, node j, node k){
int ijx = i.x - j.x, ijy = i.y - j.y, jkx = j.x - k.x, jky = j.y - k.y;
return ijx * jky == jkx * ijy;//转换距离比例成乘法
}
int main(){
int n;
cin >> n;
for(int i = 1; i <= n; i++){
cin >> a[i].x >> a[i].y;
}
int mx = 1;//如果只有一个点,不会循环,所以要把最开始初始化为1
for(int i = 1; i <= n; i++){
for(int j = i + 1; j <= n; j++){
int ct = 0;
for(int k = 1; k <= n; k++){
if(check(a[i], a[j], a[k])) ct++;//如果三个点在一条直线上,计数
}mx = max(mx, ct);
}
}
cout << mx;
return 0;
}
时间复杂度:O(n3)
这里空空如也
有帮助,赞一个