NOIP2012 貪心 高精度 國王遊戲

2021-07-24 16:52:10 字數 1828 閱讀 1449

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

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

格式 輸入格式

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

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

輸出格式

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

樣例1

樣例輸入1[複製]

3 1 1

2 3

7 4

4 6

樣例輸出1[複製]

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

臨近noip,來打一打高精度

看到最大最小會以為是二分吧,但幸好這個明顯沒有單調性,所以就可以直接丟了

考慮貪心的證明

首先對於相鄰的i,j他們任意交換位置不會對前面的大臣和後面的大臣產生影響

設i前面大臣累乘結果為sum,i(li,ri),j(lj,rj)

①i在前面

ans=max(sum/ri,sum*li/rj)

②j在前面

ans=max(sum/rj,sum*lj/ri)

顯然的,①的後一項比②的前一項大,②的後一項比①的前一項大,麼只要②的後一項比①的後一項大,一定選擇i在前面更優,這個條件就可以推出,li*ri

#include

#include

#include

#include

using

namespace

std;

const

int n=1e3;

int n;

int readint()

return x;

}struct minister

ans,temp,sum;

bool compare(hp a,hp b)

hp multi(hp a,int b)

for (int i=a.w[0]+1;i<=ret.w[0];i++)

while (ret.w[0]>1&&!ret.w[ret.w[0]]) ret.w[0]--;

return ret;

}hp division(hp a,int b)

while (ret.w[0]>1&&!ret.w[ret.w[0]]) ret.w[0]--;

return ret;

}int main()

for (int i=ans.w[0];i;i--) printf("%d",ans.w[i]);

return

0; }

noip2012 國王遊戲《貪心 高精度》

終於過了。這道高精度總算是過了,為了這道題我還特意去學了高精度除以搞精度 雖然最後只需要高精度除以低精度 這道題都是看新番國王遊戲的時候突發奇想跑來做的qaq。這道題的貪心思路是,按照左右手相乘來從小到大排序,乘積相同就按照右手從小到大。至於為什麼這麼貪心,我個人的想法是,將右手數大的盡量排後面 除...

noip 國王遊戲 貪心 高精度

說實話我一開始是不想發這道題的,雖然比較水,但不知道是不是因為我太久都沒有寫高精度了,還是寫錯了,才40分,還是發上來吧。恰逢h國國慶,國王邀請n位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這n位大臣排成一排,國王站在隊伍的最...

noip 2012 國王遊戲(貪心 高精)

我是不會說我考試的時候想到了正解卻把金幣取大看成金幣求和的.覺得只按左右手乘積排序不太對 有反例 也可能我反例放到這個題裡是錯的吧 按自己的理解排的序 就是各種討論.假設 第i個人是x1 y1 第i 1個人是x2 y2 前面所有的左手乘積為s 我們通過考慮這兩個人決定排序的規則 答案就是 min m...