本人感觉这是一篇很水的橙题 。
先讲思路:
此题考查的主要是结构体排序。
关于结构体:
结构体是用户定义的数据类型。它可以把几种不同类型的数据项集合成结构体这样一个单一类型。
于是有了这种神奇的东西后,我们便可以讲许多数据绑定在一起。
定义结构体:
1 2 3
| struct node{ int x,y,s,yy,z; }r[114514];
|
关于结构体排序:
可以用一种数据排序,也可先优先用第一种,再用第二种。
由于结构体里可能包含多种数据,所以用 sort 较为方便(也许吧)。
所以……
由于 sort 默认是升序排列,所以要用 cmp。
1 2 3 4
| bool cmp(node t1,node t2){ return t1.z>t2.z; }
|
主函数部分:
1 2 3 4 5 6 7 8 9 10 11 12 13
| int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>r[i].y>>r[i].s>>r[i].yy; r[i].x=i; r[i].z+=(r[i].y+r[i].s+r[i].yy); } stable_sort(r+1,r+n+1,cmp); for(int i=1;i<=5;i++){ cout<<r[i].x<<" "<<r[i].z<<endl; } return 0; }
|
应该能看懂吧。
我的代码要用稳定排序,否则会 WA 一个点(也不知道为什么)。
所以……
AC代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include<bits/stdc++.h> using namespace std; int n; struct node{ int x,y,s,yy,z; }r[114514]; bool cmp(node t1,node t2){ if(t1.z==t2.z){ return t1.y>t2.y; } return t1.z>t2.z; } int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>r[i].y>>r[i].s>>r[i].yy; r[i].x=i; r[i].z+=(r[i].y+r[i].s+r[i].yy); } stable_sort(r+1,r+n+1,cmp); for(int i=1;i<=5;i++){ cout<<r[i].x<<" "<<r[i].z<<endl; } return 0; }
|
温馨提示:抄袭不利己