0
点赞
收藏
分享

微信扫一扫

OJ解题排行榜

Separes 2022-03-26 阅读 269
c++

OJ解题排行榜中,按解题总数生成排行榜。假设每个学生信息仅包括学号、解题总数。要求先输入n个学生的信息,然后按解题总数降序排列,若解题总数相等,则按学号升序排列。

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。
每组测试数据先输入一个正整数n(1≤n≤100),表示学生总数。然后输入n行,每行包括一个不含空格的字符串s(不超过8位)和一个正整数d,分别表示一个学生的学号和解题总数。

对于每组测试数据,输出最终排名信息,每行一个学生的信息:排名、学号、解题总数。每行数据之间留一个空格。注意,解题总数相同的学生其排名也相同。

1
4
0010 200
1000 110
0001 200
0100 225
1 0100 225
2 0001 200
2 0010 200
4 1000 110
#include <iostream>
#include <algorithm>
using namespace std;
struct BDP
{
	int sit;
	string num;
	int sum;
}; 
int cmp(const struct BDP &A,const struct BDP &B)
{
	if(A.sum==B.sum)return A.num<B.num;//若解题总数相同按照学号升序排列 
	else return A.sum>B.sum;//解题总数不同按照解体总数降序排列 
}
int main()
{
	BDP a[1000];
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		getchar();
		for(int i = 1;i <= n;i ++ )
		{
			cin>>a[i].num>>a[i].sum;
		}
		sort(a+1,a+1+n,cmp);
		for(int i = 1;i <= n;i ++ )
		{
			a[i].sit=i;
			if(a[i].sum==a[i-1].sum)a[i].sit=a[i-1].sit;//若解题总数相同则继承上一名次 
			cout<<a[i].sit<<' '<<a[i].num<<' '<<a[i].sum<<endl;
		}
	}
}
举报

相关推荐

0 条评论