#114-【排序】水王爭霸
阿新 • • 發佈:2018-11-09
題目描述
眾所周知,IOIForum有很多水王,他們的發貼數是如此之多,以至於必須要用高精度數才能儲存。
為了迎接國慶,IOIForum決定舉行一次水王爭霸賽,比賽的規則是將這些水王截止到2003年9月30日23時59分59秒這一刻所發的總貼數從大到小進行排序。每個水王當然都想取得儘量靠前的名次,所以他們竭盡全力,不擇手段地進行灌水。
終於,激動人心的一刻到來了,2003年10月1日0時0分0秒,你作為裁判得到了每個水王的發貼數,現在,你的任務是公正地把這些水王按照發貼數從大到小進行排序。
輸入
輸入的第一行是一個1到1000的整數N,表示總共有N位水王參加了爭霸賽。
以下依次給出每位水王的描述,一位水王的描述佔據兩行,第一行為一個僅由字母和數字組成的長度不超過20的字串,代表這個水王的ID,第二行一個高精度的整數(非負數),代表這個水王的發貼數。注意,這個整數的首位沒有不必要的0。
考慮到IOIForum的資料庫是有限的,所有水王發貼數的總長度(注意,是總長度而不是總和)不會超過10000。
除了子母、數字和必要的換行,輸入中不會出現空格等字元。
輸出
依次輸出按照發貼數從大到小排好序的各位水王的ID,每個ID佔據單獨的一行。不能有任何多餘的字元。若幾個ID的發貼數相同,則按照ID的字典順序先後排列。
樣例輸入
6 lowai 1534534124561243453 zhouyuan 23453265344 Maolaoda 23442353452342 BuTaoCaiGuai 7568784573464 ArthurKing 97534892734723947 hyyylr 623893451
樣例輸出
lowai ArthurKing Maolaoda BuTaoCaiGuai zhouyuan hyyylr
提示
來源
(還是STL好)
#include <iostream> #include <string> #include <algorithm> #define SIZE 1010 using namespace std; struct node { string id, c; }; node a[SIZE]; bool comp(node a, node b) // 排序判斷 { if (a.c.size() != b.c.size()) { return a.c.size() > b.c.size(); } if (a.c != b.c) { return a.c > b.c; } return a.id < b.id; } int main(void) { int n, i; scanf("%d", &n); for (i = 1; i <= n; ++i) { cin >> a[i].id >> a[i].c; } sort(a + 1, a + n + 1, comp); for (i = 1; i <= n; ++i) { cout << a[i].id << endl; } return 0; }