HrbustOJ 1023 JiaoZhu and CS

JiaoZhu and CS

Time Limit: 2000 MS Memory Limit: 65536 K

Total Submit: 1704(659 users) Total Accepted: 804(607 users) Rating: Special Judge: No

Description

自从电子竞技在中国被认定为第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可能会超时

Author

Chadalt

题解

结构体排序,注意题给要求就好了。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <map>
#include <cstring>
#include <cstdio>
#include <algorithm>

using namespace std ;

typedef struct{
char gun_name[15] ;
int attack ;
int price ;
}meassage ;

bool cmp( meassage a , meassage b ){
if ( a.attack == b.attack ){
if ( a.price == b.price ){
return strcmp(a.gun_name , b.gun_name) < 0 ;
}
return a.price < b.price ;
}
return a.attack > b.attack ;
}

int main(){
int n ;
while ( scanf("%d" , &n) != EOF ){
meassage mea[n+10] ;
for ( int i = 0 ; i < n ; i ++ ){
scanf("%s %d %d" , mea[i].gun_name , &mea[i].attack , &mea[i].price) ;
}
sort(mea , mea + n , cmp) ;
for ( int i = 0 ; i < n ; i ++ ){
puts(mea[i].gun_name) ;
}
}
return 0 ;
}