1 条题解

  • 0
    @ 2024-8-10 22:21:52

    这个题目是一道用结构体排序解决的问题,首先我们要建一个星星的结构体,里面存储星星的x坐标,y坐标和星星的ID,其次我们要判断n是否为奇数,如果n是奇数,那么直接输出-1就可以了,因为n如果是奇数,那么最后一定会有一颗星星无法连接成一条线段。在这个判断的基础上,如果n是偶数,那么我们就要对每个星星对应的结构体进行排序。先判断第一颗星星。的x坐标是否小于第二颗星星的x坐标,如果两颗星星的x坐标相等,则判断它们的y坐标,接着新建一个sum变量,用这个变量来存储星星连接后形成的线段的长度,然后输出sum。接下来用for循环进行遍历,每次把第i颗星星和第i+1颗星星的ID输出出来,然后进行换行,这道题就做完了。这其中要注意的是,一定不要把x和y的排序方式搞混,否则输出出来的结果是不理想的。 ###上AC代码!###

    #include <algorithm>
    #include <iostream>
    using namespace std;
    struct star{
        int x;
        int y;
        int id;
    };
    star a[1010];
    bool cmp(star x,star y){
        if(x.x==y.x){
            return x.y<y.y;
        }
        return x.x<y.x;
    }
    int main(){
        int n;
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>a[i].x>>a[i].y;
            a[i].id=i;
        }
        if(n%2!=0){
            cout<<-1;
            return 0;
        }
        sort(a+1,a+n+1,cmp);
        int sum=0;
        for(int i=1;i<=n;i+=2){
            sum+=a[i+1].x-a[i].x;
        }
        cout<<sum<<endl;
        for(int i=1;i<=n;i+=2){
            cout<<a[i].id<<' '<<a[i+1].id<<endl;
        }
        return 0;
    }
    
    

    信息

    ID
    750
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    (无)
    递交数
    24
    已通过
    11
    上传者