1 条题解
-
0
这个题目是一道用结构体排序解决的问题,首先我们要建一个星星的结构体,里面存储星星的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
- 上传者