P1080 國王遊戲

2022-05-09 18:53:22 字數 2477 閱讀 4721

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

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

輸入格式:

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

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

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

輸出格式:

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

輸入樣例#1:

3 

1 1

2 3

7 4

4 6

輸出樣例#1:

2

【輸入輸出樣例說明】

按 1、2、3 號大臣這樣排列隊伍,獲得獎賞最多的大臣所獲得金幣數為 2;

按 1、3、2 這樣排列隊伍,獲得獎賞最多的大臣所獲得金幣數為 2;

按 2、1、3 這樣排列隊伍,獲得獎賞最多的大臣所獲得金幣數為 2;

按 2、3、1 這樣排列隊伍,獲得獎賞最多的大臣所獲得金幣數為 9;

按 3、1、2 這樣排列隊伍,獲得獎賞最多的大臣所獲得金幣數為 2;

按 3、2、1 這樣排列隊伍,獲得獎賞最多的大臣所獲得金幣數為 9。

因此,獎賞最多的大臣最少獲得 2 個金幣,答案輸出 2。

【資料範圍】

對於 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。

noip 2012 提高組 第一天 第二題

不想寫高精.jpg.

思路很簡單,就是把a*b從小到大排序

1.證明:

1)知道,如果相鄰的兩個人交換位置,只會影響到這兩個人的值,不會影響他人

2)假設相鄰的兩個人i, i + 1。設a[i] b[i] <= a[i + 1] b[i + 1],i之前所有人的左手乘積為s。

則,ans1 = max

若交換則,ans2 = max

因為,a[i] b[i] <= a[i + 1] b[i + 1]

所以,s a[i] / b[i + 1] <= s a[i + 1] / b[i]

又因為,s / b[i + 1] <= s * a[i] / b[i + 1]

所以,ans2 = s * a[i + 1] / b[i]

ans1 = max

所以,ans1 <= ans2

2.證明:

取 log 變成加法.

其實只與相鄰兩人的順序有關.

前後的人他們都影響不了.

推一推式子. 假設有倆人 i,j.

i 在 j 前面的答案是

maxi 在 j 後面的答案是

max顯然 −b j < a i − b j ,−b i < a j − b i .

所以 a i − b j < a j − b i .

所以 a i + b i < a j + b j

1 #include2 #include3 #include4 #include5 #include6 #include7

#define lli long long int

8using

namespace

std;

9const lli maxn=1001

;10 inline void read(lli &n)

1114

while(c>='

0'&&c<='9')

15 flag==1?n=-x:n=x;16}

17struct

node

1821

}pep[maxn];

22 lli comp(const node &a,const node &b)

2326 lli now=1

;27 lli ans=0;28

intmain()

2934 sort(pep+2,pep+n+2

,comp);

35for(lli i=1;i<=n+1;i++)

3640

//printf("%lld",ans);

41 cout<42return0;

43 }

P1080 國王遊戲

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

P1080 國王遊戲

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

P1080 國王遊戲

傳送門 考慮任意乙個排隊方案,對於其中某兩個相鄰位置 i 0,j i 1 如果交換更優 那麼有 max a r i al i r j max a r j al j r i 其中 a prod l k l 0 是國王左手的數 因為 a r i al j r i a r j al i r j 分類討論一...