1 条题解

  • 1
    @ 2022-7-17 21:46:44
    #include <iostream>
    using namespace std;
    struct point{
        int x,y;
    };
    int main(){
        int n; 
        cin>>n;
        point p[n];
        for (int i=0;i<n;i++){
            cin>>p[i].x>>p[i].y;
        }
        int max=0;
        for (int i=0;i<n-1;i++){
            for (int j=i+1;j<n;j++){//任取两点i,j,姑且记为I、J吧
                int cnt=2;//IJ上本就有I、J两点
                point vec1;//用点坐标代替向量IJ(此处应该有“→”)
                vec1.x=p[j].x-p[i].x;
                vec1.y=p[j].y-p[i].y;//IJ=(xj-xi,yj-yi)
                for (int h=0;h<n;h++){//枚举异于i、j的所有点
                    if (h==i || h==j) continue;
                    point vec2;//同样的方法计算向量IH
                    vec2.x=p[h].x-p[i].x;
                    vec2.y=p[h].y-p[i].y;
                    if (vec1.x*vec2.y==vec1.y*vec2.x){//如果IJ与IH共线,即I、J、H三点共线
                        cnt++;//直线IJ上的点+1
                    }
                }
                if (cnt>max) max=cnt;
            }
        }
        cout<<max;
        return 0;
    }
    
    • 1

    信息

    ID
    143
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    2
    已通过
    2
    上传者