每年奧運會各大**都會公布乙個排行榜,但是細心的讀者發現,不同國家的排行榜略有不同。比如中國金牌總數列第一的時候,中國**就公布「金牌榜」;而美國的獎牌總數第一,於是美國**就公布「獎牌榜」。如果人口少的國家公布乙個「國民人均獎牌榜」,說不定非洲的國家會成為榜魁…… 現在就請你寫乙個程式,對每個前來諮詢的國家按照對其最有利的方式計算它的排名。
輸入格式:
輸入的第一行給出兩個正整數n和m(≤224,因為世界上共有224個國家和地區),分別是參與排名的國家和地區的總個數、以及前來諮詢的國家的個數。為簡單起見,我們把國家從0 ~ n−1編號。之後有n行輸入,第i行給出編號為i−1的國家的金牌數、獎牌數、國民人口數(單位為百萬),數字均為[0,1000]區間內的整數,用空格分隔。最後面一行給出m個前來諮詢的國家的編號,用空格分隔。
輸出格式:
在一行裡順序輸出前來諮詢的國家的排名:計算方式編號。其排名按照對該國家最有利的方式計算;計算方式編號為:金牌榜=1,獎牌榜=2,國民人均金牌榜=3,國民人均獎牌榜=4。輸出間以空格分隔,輸出結尾不能有多餘空格。
若某國在不同排名方式下有相同名次,則輸出編號最小的計算方式。
輸入樣例:
4 451 100 1000
36 110 300
6 14 32
5 18 40
0 1 2 3
輸出樣例:
1:1 1:2 1:3 1:4
解題很繁瑣的一道題,要注意的是相同排名的情況
每次排序的時候順序都要打亂的,所以最後還要根據m的順序排序,這裡可以再在結構體裡設定乙個變數,存在m輸入時的順序。其它的都設定成1000(比224大就行)然後排序的時候它們自然而然的到前面了
**
#include
#include
using
namespace std;
struct country cou[
250]
;bool
cmp1
(country a, country b)
bool
cmp2
(country a, country b)
bool
c***
(country a, country b)
bool
cmp4
(country a, country b)
bool
cmp(country a, country b)
bool
check
(country a, country b,
int k)
else
if(k ==2)
else
if(k ==3)
else
if(k ==4)
return
false;}
void
give
(int n,
int k)
elseif(
!check
(cou[i]
, cou[i -1]
, k)
)//如果不相等才修改
if(cou[i]
.mingci > mc)}}
intmain()
for(
int i =
0; i < m; i++
)sort
(cou, cou + n, cmp1)
;give
(n,1);
sort
(cou, cou + n, cmp2)
;give
(n,2);
sort
(cou, cou + n, c***)
;give
(n,3);
sort
(cou, cou + n, cmp4)
;give
(n,4);
sort
(cou, cou + n, cmp)
;for
(int i =
0; i < m;
++i)
}
奧運排行榜
每年奧運會各大 都會公布乙個排行榜,但是細心的讀者發現,不同國家的排行榜略有不同。比如中國金牌總數列第一的時候,中國 就公布 金牌榜 而美國的獎牌總數第一,於是美國 就公布 獎牌榜 如果人口少的國家公布乙個 國民人均獎牌榜 說不定非洲的國家會成為榜魁 現在就請你寫乙個程式,對每個前來諮詢的國家按照對...
奧運排行榜
7 17 奧運排行榜 25 分 每年奧運會各大 都會公布乙個排行榜,但是細心的讀者發現,不同國家的排行榜略有不同。比如中國金牌總數列第一的時候,中國 就公布 金牌榜 而美國的獎牌總數第一,於是美國 就公布 獎牌榜 如果人口少的國家公布乙個 國民人均獎牌榜 說不定非洲的國家會成為榜魁 現在就請你寫乙個...
PTA 奧運排行榜
題目描述 每年奧運會各大 都會公布乙個排行榜,但是細心的讀者發現,不同國家的排行榜略有不同。比如中國金牌總數列第一的時候,中國 就公布 金牌榜 而美國的獎牌總數第一,於是美國 就公布 獎牌榜 如果人口少的國家公布乙個 國民人均獎牌榜 說不定非洲的國家會成為榜魁 現在就請你寫乙個程式,對每個前來諮詢的...