SCAU------18107 校赛排名

Description
校赛结束了,每一个参赛选手由3个数据项构成(通过题数,用时分钟数,姓名),排名按照通过题数排序
通过题数多的排前,同题数的,罚时少的排前。如果题数相同,罚时也相同,而按数据读取的先后排。
给你N个参赛选手的数据,按排序先后,输出姓名

输入格式
第一个数为N,(N<=500000)
此后,每行一个参赛选手的数据,通过题数,用时分钟数,姓名,前两者为整型数,姓名为字符串(不多于20个字符)

输出格式
姓名排名

输入样例
4
3 5 Jon
5 100 Smith
3 5 Tom
6 95 Hel

输出样例
Hel
Smith
Jon
Tom

提示
由于有500000个数据,输入和输出务必使用scanf和printf

代码如下:

#include <cstdio>
#include <algorithm>//stable_sort(a,a+n,cmp) a为迭代器 
using namespace std;
typedef struct 
{
	int ac;
	int t;
	char name[20];
}node;
bool cmp(node a,node b)
{
	if(a.ac!=b.ac) return a.ac>b.ac;//ac数大的优先级高 
	else if(a.t!=b.t) return a.t<b.t;//ac数一样,用时少的优先级高 
	return 0;
}
node peo[500005];//数组太大不能在main内定义,否则系统不会分配 
int main()
{
	int n,i;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d%d%s",&peo[i].ac,&peo[i].t,peo[i].name);
	}
	stable_sort(peo,peo+n,cmp);//使用stable_sort稳定排序 
	for(i=0;i<n;i++)
	{
		printf("%s\n",peo[i].name);
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/BitcoinR/article/details/106591097