題目如下:
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
7ak47 500 200
awp 1000 500
usp 50 20
m4a1 500 300
mp5 200 100
*** 200 100
mp4 200 100
sample output
awpak47
m4a1
***mp4
mp5usp
思路:c++中可以定義結構體,而我們只需要對結構體進行排序就可以了。
我們都知道在c++中有stl有個排序函式:
sort(),其模板為:
sort(start,end,排序方法);
而我們只需要重寫排序方法就ok了,
因此我們需要定義乙個bool型的函式(int型也可以,在c/c++中,0為flase,1為true)。
根據排序規則,乙個元素按照由大到小,乙個元素按照有小到大,另乙個按字典序排列,因此
cmp函式可如下定義:
bool cmp (const
gun &s1,const
gun &s2)
if(s1.b!=s2.b)
return s1.b>s2.b;
if(s1.m!=s2.m)
return s1.m
m;char *w=(char *)s1.a;
char *e=(char *)s2.a;
if (strcmp(w,e)<0)
return
1;else
return
0;附上ac**:
#include
#include
#include
#include
#include
usingnamespace
std;
structgun {
char a[15];
int b;
int m;
bool cmp (const
gun &s1,const
gun &s2)
if(s1.b!=s2.b)
return s1.b>s2.b;
if(s1.m!=s2.m)
return s1.m
m;char *w=(char *)s1.a;
char *e=(char *)s2.a;
if (strcmp(w,e)<0)
return
1;else
return
0;int main()
int n;
while(~scanf("%d",&n))
gun q[n];
for(int i=0;i//cin>>q[i].a>>q[i].b>>q[i].m;
scanf("%s",q[i].a);
scanf("%d%d",&q[i].b,&q[i].m);
sort(q,q+n,cmp);
for(int i=0;i//coutprintf("%s\n",q[i].a);
return0;
本題還有個坑.....就是測試資料量很大,如果你用cin,cout會超時。。。。(別問我怎麼知道的)。。。。。
結構體及結構體排序
1 定義的方法struct node 用strut定義乙個結構體,node是結構體的名字,可以自己瞎取。p 1000 這樣你就定義了乙個神奇的陣列!沒錯,它就是node型陣列!上面的 還在結構體的末尾定義了乙個該型的陣列,其實這個陣列不一定要有,而且也可以在主函式中定義,但是感覺上用的比較多,而且這...
結構體的排序
對於排序的方法,我們知道很多種。但實際應用中,最麻煩的不是排序本身,因為幾乎所有語言都提供了排序的函式。而麻煩的是不經需要排序,還需要把一些附帶的資料的位置也跟著重新排列。比如我們有很多學生的資料。每個學生是乙個物件,然後這些物件按一定順序放在乙個陣列裡面。我們一會兒想按照學生成績來排列這些物件,一...
結構體排序
description excel可以對一組紀錄按任意指定列排序。現請你編寫程式實現類似功能。input 測試輸入包含若干測試用例。每個測試用例的第1行包含兩個整數 n 100000 和 c,其中 n 是紀錄的條數,c 是指定排序的列號。以下有 n 行,每行包含一條學生紀錄。每條學生紀錄由學號 6位...