买奖品(sort)
题目描述:
班上刚测试了几门课,现在信息技术的老师要分析一些功课之间的成绩关系,看看每个人的信息技术课排名以及他的数学排名,并按信息技术课的成绩从高分到低分排列(数据中保证任意一学科中没有两个人的这门课成绩是一样的)。老师把任务交给了信息学最好的你,请你编程完成这个任务。
输入文件
第一行一个整数N,表示共有N个同学的成绩。
后面有N行,每行4个整数,分别表示一个同学的:语文、数学、英语、信息技术成绩。
输出文件
共N行,每行6个数据,分别对应一个同学的:语文、数学、英语、信息技术成绩 和信息技术及数学的排名。
数据范围
1<=N<=45;
每个成绩C的范围为:0<=C<=120;
样例
输入 | 3 90 95 89 110 95 120 78 115 96 97 103 92 | |
输出 | 95 120 78 115 1 1 96 87 103 92 3 2 |
#include<bits/stdc++.h>
using namespace std;
struct px
{
int yw;
int sx;
int yy;
int xx;
int sxpm;
int xxpm;
}a[10005];
bool cmp1(px x,px y){return x.sx>y.sx;}
bool cmp2(px x,px y){return x.xx>y.xx;}
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)scanf("%d%d%d%d",&a[i].yw,&a[i].sx,&a[i].yy,&a[i].xx);
sort(a+1,a+1+n,cmp1);
for(int i=1;i<=n;i++)a[i].sxpm=i;
sort(a+1,a+1+n,cmp2);
for(int i=1;i<=n;i++)a[i].xxpm=i;
for(int i=1;i<=n;i++)printf("%d %d %d %d %d %d\n",a[i].yw,a[i].sx,a[i].yy,a[i].xx,a[i].xxpm,a[i].sxpm);
return 0;
}