资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
给定2维平面上n个整点的坐标,一条直线最多能过几个点?
输入格式
第一行一个整数n表示点的个数
以下n行,每行2个整数分别表示每个点的x,y坐标。
输出格式
输出一个整数表示答案。
样例输入
5
0 0
1 1
2 2
0 3
2 3
样例输出
3
数据规模和约定
n<=1500,数据保证不会存在2个相同的点。
点坐标在int范围内
思路:比较斜率a[k]-a[i])*yy==(b[k]-b[i])*xx
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
int a[n];
int b[n];
float c[n];
for(int i=0;i<n;i++){
cin>>a[i]>>b[i];
}
int sum=2;
int count=2;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
int xx=a[j]-a[i];
int yy=b[j]-b[i];
for(int k=j+1;k<n;k++){
if((a[k]-a[i])*yy==(b[k]-b[i])*xx){
count++;
}
}
sum=max(sum,count);
count=2;
}
}
cout<<sum<<endl;
return 0;
}