试题 算法训练 共线
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
给定2维平面上n个整点的坐标,一条直线最多能过几个点?
输入格式
第一行一个整数n表示点的个数
以下n行,每行2个整数分别表示每个点的x,y坐标。
输出格式
输出一个整数表示答案。
样例输入
5
0 0
1 1
2 2
0 3
2 3
样例输出
3
数据规模和约定
n<=1500,数据保证不会存在2个相同的点。
点坐标在int范围内
import java.util.Scanner;
public class Main {
static int[][] points;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n = sc.nextInt();
points = new int[n][2];
for(int i=0;i<n;++i){
points[i][0] = sc.nextInt();
points[i][1] = sc.nextInt();
}
if(n < 3){
System.out.println(n);
return;
}
int sum = 0;
for(int i=0;i<n;++i){
for(int j=i+1;j<n;++j){
int yy = (points[j][1]-points[i][1]);
int xx = (points[j][0]-points[i][0]);
int num = 2;//两点确认一条直线
for(int k=j+1;k<n;++k){
if(yy*(points[j][0]-points[k][0]) == xx*(points[j][1]-points[k][1])){
num++;
}
}
sum = Math.max(sum,num);
}
}
System.out.println(sum);
}
}