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版权协议,转载请附上原文出处链接和本声明。