1. 程式人生 > >#114-【排序】水王爭霸

#114-【排序】水王爭霸

題目描述

眾所周知,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;
}