WZK的排名
jzoj 1995
题目大意:
有一个成绩排名,让你按成绩排序(成绩相同,年级更小的在前面),让你求对于每个人来说,成绩比他大年级比他小的人的个数
输入样例
5
300 5
200 6
350 4
400 6
250 5
输出样例
0
0
1
1
3
数据范围
对于100%的数据:1≤n≤200,0≤s≤400,1≤g≤6。
解题思路:
直接排序,然后用一个数组来存一下,比某个年级小的人有多少个,到时直接输出即可
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,s[250];
struct rec
{int num,l;
}a[250];
bool cmp(rec x,rec y){return x.num>y.num||x.num==y.num&&x.l<y.l;}//排序
int main()
{scanf("%d",&n);for (int i=1;i<=n;++i)scanf("%d %d",&a[i].num,&a[i].l);sort(a+1,a+1+n,cmp);for (int i=1;i<=n;++i){printf("%d\n",s[a[i].l]);for (int j=6;j>a[i].l;--j)//成绩低且年级更大,反过来就可以求到结果s[j]++;}return 0;
}