【JZOJ】WZK的排名

D e s c r i p t i o n DescriptionDescription

有n个人考试
A [ i ] A[i]A[i]为第i ii个人的成绩
B [ i ] B[i]B[i]为第i ii个人的年龄
现在每一个人想知道
比他成绩好
且年龄比自己小的人的数量(C[i])

I n p u t InputInput

第一行,一个数n nn
第2~n+1行,每行两个数,A[i]、B[i]

O u t p u t OutputOutput

按从大到小,输出C[i]

S a m p l e I n p u t Sample InputSampleInput
5
300 5
200 6
350 4
400 6
250 5
S a m p l e O u t p u t Sample OutputSampleOutput
0
0
1
1
3

思路

先把A[i]排一遍(从大到小)
如果相等,则用B[i]排(从小到大)
最后枚举

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
struct whw
{
	int Num,Age;
}A[50250];
int T[50250];
int Ans,n;
bool Nm(whw i,whw j)
{return (i.Num>j.Num || 
(i.Num==j.Num && i.Age<j.Age));}//见上
int main()
{
	freopen("paiming.in","r",stdin);
	freopen("paiming.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
		scanf("%d%d",&A[i].Num,&A[i].Age);
	sort(A+1,A+n+1,Nm);//排一遍
	printf("0\n");
	for(int i=2;i<=n;++i)
	{
		for(int j=1;j<i;++j)
			if(A[i].Age>A[j].Age)T[i]++;
		printf("%d\n",T[i]);
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}

版权声明:本文为SSL_wujiajie原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。