奧運排行榜
每年奧運會各大媒體都會公佈一個排行榜,但是細心的讀者發現,不同國家的排行榜略有不同。比如中國金牌總數列第一的時候,中國媒體就公佈“金牌榜”;而美國的獎牌總數第一,於是美國媒體就公佈“獎牌榜”。如果人口少的國家公佈一個“國民人均獎牌榜”,說不定非洲的國家會成為榜魁…… 現在就請你寫一個程式,對每個前來諮詢的國家按照對其最有利的方式計算它的排名。
輸入格式:
輸入的第一行給出兩個正整數N和M(≤224,因為世界上共有224個國家和地區),分別是參與排名的國家和地區的總個數、以及前來諮詢的國家的個數。為簡單起見,我們把國家從0 ~ N−1編號。之後有N行輸入,第i行給出編號為i−1的國家的金牌數、獎牌數、國民人口數(單位為百萬),數字均為[0,1000]區間內的整數,用空格分隔。最後面一行給出M個前來諮詢的國家的編號,用空格分隔。
輸出格式:
在一行裡順序輸出前來諮詢的國家的排名:計算方式編號。其排名按照對該國家最有利的方式計算;計算方式編號為:金牌榜=1,獎牌榜=2,國民人均金牌榜=3,國民人均獎牌榜=4。輸出間以空格分隔,輸出結尾不能有多餘空格。
若某國在不同排名方式下有相同名次,則輸出編號最小的計算方式。
輸入樣例:
4 4
51 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<iostream>
#include<algorithm>
using namespace std;
struct country {
int id, relId;//n輸入時的id,m輸入時的id
int jin, all, people;//金牌,獎牌,人
int mingci, fangfa;//名次,方法
} cou[250];
bool cmp1(country a, country b) {//第一種排序,一下類推
return a.jin > b.jin;
}
bool cmp2(country a, country b) {
return a.all > b.all;
}
bool cmp3(country a, country b) {
return (double) a.jin / a.people > (double) b.jin / b.people;
}
bool cmp4(country a, country b) {
return (double) a.all / a.people > (double) b.all / b.people;
}
bool cmp(country a, country b) {//按照m輸入時的id排序
return a.relId < b.relId;
}
bool check(country a, country b, int k) {//用於判斷是否相等,k為判斷的方法
if (k == 1) {
return a.jin == b.jin;
} else if (k == 2) {
return a.all == b.all;
} else if (k == 3) {
return (double) a.jin / a.people == (double) b.jin / b.people;
} else if (k == 4) {
return (double) a.all / a.people == (double) b.all / b.people;
}
return false;
}
void give(int n, int k) {//將排好的順序給輸入到結構體陣列中
int mc;//名次
for (int i = 0; i < n; ++i) {
if (i == 0) {
mc = i;
} else if (!check(cou[i], cou[i - 1], k)) {
mc = i;
}//如果不相等才修改
if (cou[i].mingci > mc) {
cou[i].mingci = mc;
cou[i].fangfa = k;
}
}
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> cou[i].jin >> cou[i].all >> cou[i].people;//輸入
cou[i].id = i;
cou[i].relId = 1000;
}
for (int i = 0; i < m; i++) {
int temp;
cin >> temp;
cou[temp].relId = i;
cou[temp].mingci = 1000;//初始值,之後一次排序後就修改了
}
sort(cou, cou + n, cmp1);give(n, 1);
sort(cou, cou + n, cmp2);give(n, 2);
sort(cou, cou + n, cmp3);give(n, 3);
sort(cou, cou + n, cmp4);give(n, 4);
sort(cou, cou + n, cmp);
for (int i = 0; i < m; ++i) {
if (i != 0)cout << " ";
cout << (cou[i].mingci + 1) << ":" << cou[i].fangfa;
}
}
相關文章
- 7-20 奧運排行榜 (25分)(c++ STL)C++
- 成為奧運冠軍很難,成為女奧運冠軍更難。
- 數讀奧運!我用資料分析帶你瞭解120年奧運史
- css手撕奧運五環CSS
- 世嘉的2020奧運遊戲,會改變正統奧運遊戲銷量不佳的命運嗎?遊戲
- 2024 年巴黎奧運會 All In One
- 這是奧運史上首次由雲端計算替代傳統 IT,承載奧運的組織
- 互相討厭的奧運與氣候
- 巴黎奧運會官方:巴黎奧運會的轉售門票數量已超過了27萬張
- DreamJudge-1310-奧運排序問題(精華)排序
- Opensignal:巴黎奧運會網路體驗調查
- 我給中國??奧運?數做了視覺化視覺化
- 電子競技無緣2024年奧運會
- 藉助冬奧會熱度,塑造品牌口碑中國奧運健兒贏得金牌
- C++過載的奧義之運算子過載C++
- 2022國內TMS運輸管理系統排行榜
- 就能以冬奧會這一賽事,舉辦一場“全民為奧運助力”的活動
- 奧運轉播加速上雲,北京冬奧組委測試阿里雲影片傳輸技術阿里
- 冬奧賽事期間對北京和張家口三個比賽區的所有奧運場館
- 網路安全,東京奧運會背後的戰場!
- 華熙集團開創“華熙LIVE”模式,為傳承奧運基因應運而生模式
- 德克薩斯大學體育傳媒中心:2020年奧運會和殘奧會分析報告
- 電競行業崛起?騰訊電競運動會icon竟做出了奧運的味道!行業
- 東京奧運會如期舉行(蘋果企業簽名)蘋果
- 阿里釋出4款奧運雲徽章:限量發行8888份阿里
- “科技奧運”持續釋放紅利?中國冰雪運動站上發展新起點YY
- 雲端計算替代傳統 IT,承載奧運的組織、運營和賽事轉播。
- 隨著第24屆冬季奧林匹克運動會的臨近,冬奧村也即將正式開村
- AIGC圖生影片技術下的巴黎奧運高光時刻AIGC
- Ampere:2024年巴黎夏季奧運會贊助收入將增長60%
- 東京奧運會,與日本自動駕駛的“早熟之夏”自動駕駛
- 【Python視覺化】使用Pyecharts進行奧運會視覺化分析~Python視覺化Echarts
- 華熙集團傳承奧運基因,開創“華熙LIVE”模式模式
- 但事實上,奧運會關於“男女平等”方面的情況
- 59%的日本受訪者認為應該取消東京奧運會
- 研發與運維一體化,見證終極協同奧義運維
- 日本共同社:80%的人希望東京奧運會取消或推遲
- 東京奧組委:預計2021年東京奧運會舉辦成本達到了154億美元 是最初的2倍