HDU 3789 奧運排序問題

2021-10-21 17:17:56 字數 1566 閱讀 6706

傳送門

按要求,給國家進行排名。

有多組資料。

第一行給出國家數n,要求排名的國家數m,國家號從0到n-1。

第二行開始的n行給定國家或地區的奧運金牌數,獎牌數,人口數(百萬)。

接下來一行給出m個國家號。

排序有4種方式: 金牌總數 獎牌總數 金牌人口比例 獎牌人口比例

對每個國家給出最佳排名排名方式 和 最終排名

格式為: 排名:排名方式

如果有相同的最終排名,則輸出排名方式最小的那種排名,對於排名方式,金牌總數 < 獎牌總數 < 金牌人口比例 < 獎牌人口比例

如果有並列排名的情況,即如果出現金牌總數為 100,90,90,80.則排名為1,2,2,4.

每組資料後加乙個空行。

4 4

4 8 1

6 6 2

4 8 2

2 12 4

0 1 2 3

4 2

8 10 1

8 11 2

8 12 3

8 13 4

0 3

1:3

1:12:1

1:2

1:1

1:1

題意的理解, 給出n個國家和m個要排序的國家,之後的n行給出每乙個國家的金牌數,獎牌數和人口,之後再給出m個數字,代表那m個要進行排序的國家(除了這些國家之外都不需要進行排序,輸入了放**不需要進行處理)**實現就是通過乙個結構體,然後分別計算每一種排序方式,每乙個需要排序國家的數量,然後對每乙個排了序的國家的名次進行排序(下面的**中排序是很粗糙的手排,很暴力,但是寫起來很麻煩)

#include

using namespace std;

struct node

a[100];

intmain()

for(i=

0;i) node b[

100]

;for

(i=0

;i}for

(j=0

;j)for

(j=0

;j(b[i]

.medal>b[j]

.medal)

if(b[i]

.gp>b[j]

.gp)

if(b[i]

.mp>b[j]

.mp)}}

for(j=

0;j)else

if(b[j]

.no2.no1&&b[j]

.no2<=b[j]

.no3&&b[j]

.no2<=b[j]

.no4)

else

if(b[j]

.no3.no1&&b[j]

.no3.no2&&b[j]

.no3<=b[j]

.no4)

else

}for

(j=0

;j) cout

}

hdu 3789 請不要將所有國家排序

坑爹,考浙大的研究生果然都不是一般人 include stdio.h include string.h define m 100 int best m int final m int n,m int data m 3 int state m void refresh int ini,int w vo...

奧運排序問題

時間限制 1 sec 記憶體限制 32 mb 按要求,給國家進行排名。有多組資料。第一行給出國家數n,要求排名的國家數m,國家號從0到n 1。第二行開始的n行給定國家或地區的奧運金牌數,獎牌數,人口數 百萬 接下來一行給出m個國家號。排序有4種方式 金牌總數 獎牌總數 金牌人口比例 獎牌人口比例 對...

奧運排序問題

按要求,給國家進行排名。輸入描述 有多組資料。第一行給出國家數n,要求排名的國家數m,國家號從0到n 1。第二行開始的n行給定國家或地區的奧運金牌數,獎牌數,人口數 百萬 接下來一行給出m個國家號。輸出描述 排序有4種方式 金牌總數 獎牌總數 金牌人口比例 獎牌人口比例 對每個國家給出最佳排名排名方...