本人感觉这是一篇很水的橙题 。

先讲思路:

此题考查的主要是结构体排序。

关于结构体:

结构体是用户定义的数据类型。它可以把几种不同类型的数据项集合成结构体这样一个单一类型。

于是有了这种神奇的东西后,我们便可以讲许多数据绑定在一起。

定义结构体:

1
2
3
struct node{
int x,y,s,yy,z;
}r[114514];

关于结构体排序:

可以用一种数据排序,也可先优先用第一种,再用第二种。

由于结构体里可能包含多种数据,所以用 sort 较为方便(也许吧)。

所以……

1
sort(r+1,r+n+1);//r为结构体

由于 sort 默认是升序排列,所以要用 cmp。

1
2
3
4
bool cmp(node t1,node t2){
return t1.z>t2.z;
}
//按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;//y,s,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);//stable_sort()是sort的稳定排序
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;//完结撒花^_^
}

温馨提示:抄袭不利己