结构体排序 hrbust 1023

来源:互联网 发布:转行金融 知乎 编辑:程序博客网 时间:2024/06/15 02:13
JiaoZhu and CSTime Limit: 2000 MSMemory Limit: 65536 KTotal Submit: 1389(558 users)Total Accepted: 675(522 users)Rating: Special Judge: NoDescription

自从电子竞技在中国被认定为第99个正式体育项目,教主就投身其中,CS(Counter Strike 反恐精英)是他拿手的一款游戏,有很多职业选手为之付出。
反恐精英中有各种不同的枪械,我们为了简化问题,规定每种枪有自己的名字、杀伤力、价格。
下面要求你按照如下规定给已知的枪支排序:
要求按照枪支的攻击力排序(由大到小),如果某些枪的攻击力相同则对这些枪按照价格排序(由小到大),如果某些枪的价格相同则对这些枪按照名字的字典序排列。(本题中若字符串a,b满足 strcmp(a, b) < 0 即满足字典序)

Input

本题只有一组测试数据
第一行:N (1 <= N <= 100000) 表示有N种枪
第1..1 + N行:首先是枪支的名字(只包括大写字母、数字,最长占10个字符),接着是两个数字A (0 <= A <= 1000) B (0 <= B <= 1000) A代表杀伤力,B代表价格

Output

排序后,每行输出一种枪的名字

Sample Input
7
AK47 500 200
AWP 1000 500
USP 50 20
M4A1 500 300
MP5 200 100
MP3 200 100
MP4 200 100
Sample Output
AWP
AK47
M4A1
MP3
MP4
MP5
USP
Hint

输入量巨大,建议使用scanf()与printf(),使用cin与cout可能会超时

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct N{char name[15];int A;int B;}; N s[100005]; int tmp(N a,N b){if(a.A==b.A){if(a.B == b.B){return strcmp(a.name,b.name) < 0;}else return a.B < b.B;}else return a.A>b.A;}int main(){int n;scanf("%d",&n);for(int i = 0; i < n; i++){scanf("%s %d %d",s[i].name,&s[i].A,&s[i].B);}sort(s,s+n,tmp);for(int i = 0 ; i < n;i++)printf("%s\n",s[i].name);}

原创粉丝点击