题目:[NOIP2007]奖学金 (nowcoder.com)
#include<bits/stdc++.h>
#define int long long
#define PII pair<int,int>
#define LL__int 128
using namespace std;
const int N=2e5+10,M=998344353;
int a[N];
struct Node{
int chinese,math,eng,sum;
int idx;//表学号
}stu[N];
bool cmp(Node a,Node b)
{
if(a.sum!=b.sum) return a.sum>b.sum;
else if(a.chinese!=b.chinese) return a.chinese>b.chinese;
else return a.idx<b.idx;
}
signed main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
int n;cin>>n;
for(int i=1;i<=n;i++)
{
int x,y,z;
cin>>x>>y>>z;
stu[i]={x,y,z,x+y+z,i};
}
sort(stu+1,stu+n+1,cmp);
for(int i=1;i<=5;i++) //输出前五名
{
cout<<stu[i].idx<<' ' <<stu[i].sum<<endl;
}
}
从这道题学会的:
- 结构体的正确运用
- sort()函数的多重比较
- 结构体的赋值和如何进行比较
- 结构体的输出