bLue's Ranklist - Vol.1

来源:互联网 发布:hp m1216nfh 网络驱动 编辑:程序博客网 时间:2024/06/09 22:01

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

56 3005 1855 1855 1404 120

Example Output

1 6 3002 5 1403 5 1853 5 1855 4 120

Hint

#include<stdio.h>#include<stdlib.h>struct node{int r;double ps,s,p;}a[1002],t;int main(){double s1,p1;int i,j,n,r1,r2;while(scanf("%d",&n)!=EOF){r1=1;for(i=1;i<=n;i++){scanf("%lf %lf",&s1,&p1);a[i].p=p1;a[i].s=s1;a[i].ps=p1/s1;}for(i=1;i<=n;i++){for(j=i;j<=n;j++){if(a[i].s<a[j].s){t=a[i];a[i]=a[j];a[j]=t;}else if(a[i].s==a[j].s){if(a[i].ps>a[j].ps){t=a[i];a[i]=a[j];a[j]=t;}}}}a[1].r=1;r2=1;for(i=2;i<=n;i++){if(a[i].s==a[i-1].s&&a[i].p==a[i-1].p){a[i].r=r1;r2++;}else {r1=r1+r2;a[i].r=r1;r2=1;}}for(i=1;i<=n;i++){printf("%d %.0lf %.0lf\n",a[i].r,a[i].s,a[i].p);}}return 0;}


0 0
原创粉丝点击