輸入:
輸入包含有多組測試資料
第一行給我國家數n和要求排名的國家數m
第二行開始的n行,每行輸入乙個國家的奧運金牌數,獎牌數,人口數。每個國家都有乙個編號,按照輸入的先後順序國家編號從0到n-1
接下來一行給出m個國家編號,按照公升序給出,你需要對這m個國家進行排名
輸出:排名有4種方式:按金牌總數排名、按獎牌總數排名、按金牌人口比例排名、按獎牌人口比例排名。這4種排名方式的序號依次為1,2,3,4,且都是降序排列。
對每個需要進行排名的國家給出最佳排名方式和最終排名,格式:排名:排名方式
如果乙個國家按照不同的排名方式卻有相同的最終排名,則輸出排名方式序號最小的那種排名
如果有多個國家並列排名的情況出現,例如4個國家的金牌數總數為100,90,90,80,則這4個國家按照金牌總數排序的排名為1,2,3,4(注意不是1,2,2,3)
最終的結果按照參與排名的國家的編號公升序輸出,並且每組輸出資料的最後輸出乙個空行
**如下:
#include #include typedef structnation;
nation na[100];
int cmp_0(const void *pa,const void *pb)
int cmp_1(const void *pa,const void *pb)
int cmp_2(const void *pa,const void *pb)
int cmp_3(const void *pa,const void *pb)
int cmp_4(const void *pa,const void *pb)
int main()
//order by total
qsort(na,m,sizeof(na[0]),cmp_1);
for(i=0;i0&&na[i-1].ordervalue[1]==na[i].ordervalue[1])
na[i].order[1]=na[i-1].order[1];
else
na[i].order[1]=i+1;
} //order by gold/pop
qsort(na,m,sizeof(na[0]),cmp_2);
for(i=0;i0&&na[i-1].ordervalue[2]==na[i].ordervalue[2])
na[i].order[2]=na[i-1].order[2];
else
na[i].order[2]=i+1;
} //order by total/pop
qsort(na,m,sizeof(na[0]),cmp_3);
for(i=0;i0&&na[i-1].ordervalue[3]==na[i].ordervalue[3])
na[i].order[3]=na[i-1].order[3];
else
na[i].order[3]=i+1;
} //output the information
qsort(na,m,sizeof(na[0]),cmp_4);
for(i=0;iin2.txt中測試資料為:
4 44 8 1
6 6 2
4 8 2
2 12 4
0 1 2 3
4 28 10 1
8 11 2
8 12 3
8 13 4
0 3
數制轉換(ACM俱樂部題號 1942)
題目描述 求任意兩個不同進製非負整數的轉換 二進位製到十六進製制 所給整數在long所能表達的範圍之內。不同進製的表示符號為 0,1,9,a,b,f 或者 0,1,9,a,b,f 輸入 輸入包含多組測試資料。每組輸入佔一行,包含3個整數a,n,b。a表示其後的n是a進製整數,b表示欲將a進製整數n轉...
南陽理工ACM263 精 挑 細 選(結構體排序)
時間限制 3000 ms 記憶體限制 65535 kb 難度 1 描述 小王是公司的倉庫管理員,一天,他接到了這樣乙個任務 從倉庫中找出一根鋼管。這聽起來不算什麼,但是這根鋼管的要求可真是讓他犯難了,要求如下 1 這根鋼管一定要是倉庫中最長的 2 這根鋼管一定要是最長的鋼管中最細的 3 這根鋼管一定...
day 3 acm貪心(sort結構體排序)
點我看原題 今年暑假不ac?是的。那你幹什麼呢?看世界盃呀,笨蛋!確實如此,世界盃來了,球迷的節日也來了,估計很多acmer也會拋開電腦,奔向電視了。作為球迷,一定想看盡量多的完整的比賽,當然,作為新時代的好青年,你一定還會看一些其它的節目,比如新聞聯播 永遠不要忘記關心國家大事 非常6 7 超級女...