SWUSTOJ #133 水王爭霸

題目

衆所周知,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

源代碼

#include <stdio.h>
#include <string.h>

struct shuiwang
{
	char name[20];
	char num[10000];
}a[1000];

int main()
{
	int i, n, j, len[1000], t, k, b[1000], e, c, d;
	scanf("%d", &n);
	for(i=0; i<n; i++)
	{
   		scanf("%s", a[i].name);
   		getchar();
   		scanf("%s", a[i].num);
   		getchar();
   		len[i] = strlen(a[i].num);
   		b[i] = i;
	}
	for(i=0; i<n; i++)
	{
		for(j=i+1; j<n; j++)
		{
			if(len[j] > len[i])
			{
   				t = len[i];
   				len[i] = len[j];
   				len[j] = t;
     			k = b[i];
     			b[i] = b[j];
    			b[j] = k;
			}
			else if(len[i] == len[j])
			{
				c = b[i];
				d = b[j];
				if(strcmp(a[c].num,a[d].num) < 0)
				{
      				k = b[i];
      				b[i] = b[j];
        			b[j] = k;
				}
    			else if(strcmp(a[c].num,a[d].num) == 0)
  				{
        			if(strcmp(a[c].name,a[d].name) > 0)
        			{
           				k = b[i];
           				b[i] = b[j];
           				b[j] = k;
        			}
  				}
  			}
  		}
	}
	for(i=0; i<n; i++)
	{
		e = b[i];
		printf("%s\n", a[e].name);
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章