平面上有n个点,现在你需要建造两条路,一条是斜率为1,
另一条斜率为-1
你的任务是让这两条路经过尽可能多的点
求最多经过几个点
题目:斜率为±1的两条直线最多经过几个点,并输出。
解题思路:
- 那么我们可以有方程斜率为1的直线为y=x+b1
- 斜率为-1的直线为y=-x+b2
- 可以得出b1=y-x,b2=y+x
- 如果b1或b2相同,则点在这两条直线上
- 因此问题变成了最多有几个点的b1或b2相同
- 那么枚举b1b2即可
#include <stdio.h>
#include <stdlib.h>
int main() {
int N=0;
int x[1000]={
0};
int y[1000]={
0};
int i,j,k,max=0;
scanf("%d",&N);
for(i=0;i<N;i++){
scanf("%d",&x[i]);
}
for(j=0;j<N;j++){
scanf("%d",&y[j]);
}
for(i=0;i<N;i++){
int b1 = y[i]-x[i];
for(j=0;j<N;j++){
int b2 = y[j]+x[j];
int count=0;
for(k=0;k<N;k++){
if(b1 == y[k]-x[k] || b2 == y[k]+x[k]){
count++;
}
}
if(max<count){
max = count;
}
}
}
printf("%d",max);
return 0;
}