Problem Description
上一场比赛结束后,bLue 及时保存了一份比赛的排行榜 (Ranklist)。然而昨天 bLue 打开保存的 Ranklist 一看,发现保存的文件发生了不可描述的错误,非要强行描述的话,就是他保存的 Ranklist 上只能看到每个人的解题数量和罚时 (Penalty),而且顺序完全错乱了。
崩溃的 bLue 看着崩坏的 Ranklist 一筹莫展。不过他突然想到,马上就到下一场循环赛了,不如正好出一个题让学弟学妹来帮他修复坏掉的 Ranklist,这样他就可以拿 AC 的代码去修复文件了,是不是相当机智啊 ^_^ 。
Ranklist 的排序规则是这样的:解题数多的靠前,如果解题数相同,则罚时少的靠前。如果两个人的解题数和罚时都相同,则他们的排名也相同。
Input
输入数据有多组(数据组数不超过 1000),到 EOF 结束。
每组数据包含多行:
- 第一行是一个整数 n (0 < n < 1000),表示 Ranklist 上的人数。
- 接下来有 n 行,每行包含两个整数 s, p (0 <= s < 20, 0 <= p < 10000),分别表示这个人的解题数和总罚时(单位为分钟)。
Output
对于每组输入,输出 n 行,为重新排序后的 Ranklist。
每行输出均为此 Ranklist 上一个人的信息,包含 3 个整数 r, s, p,分别表示排名、解题数和总罚时。
Example Input
5
6 300
5 185
5 185
5 140
4 120
Example Output
1 6 300
2 5 140
3 5 185
3 5 185
5 4 120
#include<stdio.h>
struct node
{
int a;
int b;
}st[1000],abc;
int main()
{
int t;
int i,j;
int m[1000]={0};
while(scanf("%d",&t)!=EOF)
{
for(i=0;i<t;i++)
{
scanf("%d%d",&st[i].a,&st[i].b);
}
for(i=0;i<t-1;i++)
{
for(j=0;j<t-1-i;j++)
{
if(st[j].a < st[j+1].a)
{
abc=st[j];
st[j]=st[j+1];
st[j+1]=abc;
}
else if((st[j].a==st[j+1].a) && (st[j].b > st[j+1].b))
{
abc=st[j];
st[j]=st[j+1];
st[j+1]=abc;
}
}
}
m[0]=1;
for(i=1;i<t;i++)
{
if((st[i].a==st[i-1].a) && (st[i].b == st[i-1].b))
{
m[i]=m[i-1];
}
else
{
m[i]=i+1;
}
}
for(i=0;i<t;i++)
{
printf("%d %d %d\n",m[i],st[i].a,st[i].b);
}
}
return 0;
}