原题链接:https://ac.nowcoder.com/acm/problem/18951
解题思路,先枚举出选取两个点(可以是相同的),分别以这两个点,画出这两条线来,然后判断其他点是否在这两条直线上。
技巧:判断其他点是否在这两条线上只需要判断其他点构成的直线是否和这两条直线的y轴交点相同。
#include<bits/stdc++.h>
int x[1005];
int y[1005];
using namespace std;
int main()
{
int n;
int max=0;
ios::sync_with_stdio(false);//取消同步加快读取速度
cin.tie(NULL);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x[i];
}
for(int i=1;i<=n;i++)
{
cin>>y[i];
}
for(int i=1;i<=n;i++)
{
int c1=y[i]-x[i];//以第i个点建立斜率为1的直线与y轴交点纵坐标
for(int j=1;j<=n;j++)
{
int sum=0;
int c2=x[j]+y[j];以j点建立斜率为-1的直线与y轴交点纵坐标
for(int t=1;t<=n;t++)
{
if(x[t]+y[t]==c2||y[t]-x[t]==c1)//判断t点是否在直线上,而且用||巧妙避免了重复算入
{
sum++;
}
}
if(sum>max)
{
max=sum;
}
}
}
cout<<max<<endl;
}