VIJOS 1779 國王遊戲

2021-06-19 01:48:17 字數 1826 閱讀 6994

恰逢h國國慶,國王邀請n位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左、右手上面分別寫下乙個整數,國王自己也在左、右手上各寫乙個整數。然後,讓這n位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是:排在該大臣前面的所有人的左手上的數的乘積除以他自己右手上的數,然後向下取整得到的結果。 

國王不希望某乙個大臣獲得特別多的獎賞,所以他想請你幫他重新安排一下隊伍的順序,使得獲得獎賞最多的大臣,所獲獎賞盡可能的少。注意,國王的位置始終在隊伍的最前面。

第一行包含乙個整數n,表示大臣的人數。 

第二行包含兩個整數a和b,之間用乙個空格隔開,分別表示國王左手和右手上的整數。接下來n行,每行包含兩個整數a和b,之間用乙個空格隔開,分別表示每個大臣左手和右手上的整數。

輸出只有一行,包含乙個整數,表示重新排列後的隊伍中獲獎賞最多的大臣所獲得的金幣數。

3 

1 1

2 3

7 4

4 6

2

每個測試點1s

對於20%的資料,有1≤ n≤ 10,0 < a、b < 8; 

對於40%的資料,有1≤ n≤20,0 < a、b < 8; 

對於60%的資料,有1≤ n≤100; 

對於60%的資料,保證答案不超過10^9; 

對於100%的資料,有1 ≤ n ≤1,000,0 < a、b < 10000。

noip2012提高組複賽day1t2

去年這題按右手排序騙了45好像。。

恩 其實這是乙個貪心題

usaco 50題精選中有乙個按加法排序的

這個題需要按乘法排序

如何考慮

假設前i個左手乘積x

相連兩個

第乙個1.a b

第二個2..c d

則按 1 2 的順序排

x/b  x*a/d 

將兩人互換後 

x/d  x*c/b

顯然x*a/d>x/d

x*c/b>x/b

我們只需討論x*a/d和x*c/b的關係 就可以確定這兩種哪一種更好

我們發現 x*a/d和x*c/b==>a/d和c/b

a/d和c/b 同乘b*d 變成 a*b和c*d

a/d所以按乘積從小到大排序 然後統計每乙個大臣的獲益 最大值輸出即可

有的同學直接輸出的最後乙個大臣的 好像有乙個點wa。。。

原因不明 個人感覺不一定在最後才取最值

用到了高精*單精  高精/單精

#include#include#include#includeusing namespace std;

const int lim=1111;

int m,z[lim];

struct selfs[lim];

int l[lim];

int a,b,c,d;

int cmp(self a1,self a2)

}void cheng(int s[lim],int x)

void copy(int f[lim],int t[lim])

bool dayu(int f[lim],int t[lim])

if(dayu(t,z))copy(t,z);

}int main()

sort(s+2,s+m+1,cmp);

l[1]=s[1].x;l[0]=1;

for(a=2;a<=m;a++)

print(z);

return 0;

}

國王的遊戲

恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手...

114 國王遊戲

除第乙個人以外的每個人能獲得的獎賞為他之前所有人的左手乘積除以自己右手上的值 注意是之前的所有人不包括自己 通過改變順序使得獲得最多獎賞最小化。貪心策略 受到奶牛的雜技這題的影響,我們發現乘積越大的要往後放除的大的也要往後放,所以我們根據左手右手的乘積從小到大排序,然後以此計算取max即可,交了之後...

國王遊戲 貪心 大數

恰逢h國國慶,國王邀請n位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這n位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面的所有人的左手上的數的乘積...