两条直线的斜率k已经确定,根据y=kx+b现在最重要的事情是找出这两条直线的b
而斜率为1的直线,b就等于y轴坐标减去z轴坐标,设为k1
斜率为-1的直线,b就等于x轴坐标加上y轴坐标,设为k2
每次确定k1和k2的值,用两个for循环,因为k1和k2的排列组合有n*n种,每次得到一种新的就遍历以前的点有多少个会分布在这上面,寻找最大的那个数即可。
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,x[10010],y[10010],i,j,ma=-1,su=0,k1,k2,k;
    cin>>n;//两条直线的斜率已经确定,根据y=kx+b现在最重要的事情是找出这两条直线的b
    for(i=0;i<n;i++)cin>>x[i];
    for(i=0;i<n;i++)cin>>y[i];
    for(i=0;i<n;i++)
    {
        k1=x[i]+y[i];
        for(j=0;j<n;j++)
        {
            k2=y[j]-x[j];
            su=0;
            for(k=0;k<n;k++)
            {
                if(x[k]+y[k]==k1||y[k]-x[k]==k2)su++;
            }
            if(su>ma)ma=su;
        }
    }
    cout<<ma;
}