1 条题解

  • 0
    @ 2025-8-24 21:21:27

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Flokirie
    **

    搬运于2025-08-24 21:21:26,当前版本为作者最后更新于2017-09-06 21:57:21,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    不知大家有没有学到高中数学,向量a=(x1,y1)和b=(x2,y2)共线==>x1y2-x2y1==0

    用此法可以避免浮点数运算

    '''cpp

    #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;
    }
    

    ''' 没学高中数学的oier们不喜勿喷^_^

    • 1

    信息

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