C++结构体bLue's Ranklist - Vol.1

bLue's Ranklist - Vol.1

Time Limit: 1000 ms  Memory Limit: 65536 KiB
Problem Description

上一场比赛结束后,bLue 及时保存了一份比赛的排行榜 (Ranklist)。然而昨天 bLue 打开保存的 Ranklist 一看,发现保存的文件发生了不可描述的错误,非要强行描述的话,就是他保存的 Ranklist 上只能看到每个人的解题数量和总时间(包括罚时),而且顺序完全错乱了。

崩溃的 bLue 看着崩坏的 Ranklist 一筹莫展。不过他突然想到,马上就到循环赛了,不如正好出一个题让学弟学妹来帮他修复坏掉的 Ranklist,这样他就可以拿 AC 的代码去修复文件了,是不是相当机智啊 ^_^ 。

Ranklist 的排序规则是这样的:解题数多的靠前,如果解题数相同,则总时间少的靠前。如果两个人的解题数和总时间都相同,则他们的排名也相同。

Input

输入数据有多组(数据组数不超过 1000),到 EOF 结束。

每组数据包含多行:

  • 第 1 行是一个整数 n (0 < n < 1000),表示 Ranklist 上的人数。
  • 接下来有 n 行,每行包含两个整数 s, p (0 <= s < 20, 0 <= p < 10000),分别表示这个人的解题数和总时间(单位为分钟)。
Output

对于每组输入,输出 n 行,为重新排序后的 Ranklist。

每行输出均为此 Ranklist 上一个人的信息,包含 3 个整数 r, s, p,分别表示排名、解题数和总时间。

Sample Input
5
6 300
5 185
5 185
5 140
4 120
Sample Output
1 6 300
2 5 140
3 5 185
3 5 185
5 4 120
Hint
Source
【第六届ACM趣味编程循环赛 Round #1】bLue
#include<bits/stdc++.h>
using namespace std;
struct ranklist{
	int r,s,p;
}person[1002];
bool cmp(ranklist a,ranklist b)
{
	if(a.s!=b.s)
	return a.s>b.s;
	else if(a.p!=b.p)
	return a.p<b.p;
        else
	return 0;//去掉else这两行就AC不了,改了半天才发现o(╥﹏╥)o
}
int main()
{
	int n,i,j;
	while(cin>>n)
	{
		for(i=0;i<n;i++)
		cin>>person[i].s>>person[i].p;
		sort(person,person+n,cmp);
		for(i=1;i<=n;i++)
		{
			person[i-1].r=i;
			j=i;
	 		while(person[j].s==person[j-1].s&&person[j].p==person[j-1].p&&j<n)
			{
				person[j].r=i;
				cout<<person[j-1].r<<' '<<person[j-1].s<<' '<<person[j-1].p<<'\n';
				j++;
			}
			i=j;
			cout<<person[i-1].r<<' '<<person[i-1].s<<' '<<person[i-1].p<<'\n';		
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abcdefzzzz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值