國王遊戲(2023年NOIP全國聯賽提高組)

2022-05-01 06:39:10 字數 2174 閱讀 9008

題目描述 description

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

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

輸入描述 input description

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

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

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

輸出描述 output description

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

金幣數。

樣例輸入 sample input

1 12 3

7 44 6

樣例輸出 sample output

資料範圍及提示 data size & hint

【輸入輸出樣例說明】

按 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。

算出每個大臣左右手數字之積,然後由小到大排序。之後捋一遍就是了。不要問我為什麼這麼貪心,貪心嗎,總是憑感覺的~

這裡資料會變得很大(超long long),需要用到高精,不會的多練練吧~

程式碼實現:

1 #include2 #include3 #include4

using

namespace

std;

5struct

natas[3000];8

int n,d,ans[6000],ys[6000],shang[6000],bcs[6000];9

int comp(const nata&x,const nata&y)

12bool

bj()

19return0;

20}21void ngs(int

x)28 shang[0]=ys[0

];29

while(!shang[shang[0]]&&shang[0]>0) --shang[0

];30

if(bj()) for(int i=0;i<=shang[0];i++) ans[i]=shang[i];

31for(int i=1;i<=ys[0];i++)

32 ys[i]*=s[x].a;

33for(int i=1;i<=ys[0];i++)39}

40}41int

main()

47 sort(s+1,s+n+1

,comp);

48for(int i=1;i<=n;i++) ngs(i);

49 d=ans[0

];50

while(!ans[d]) --d;

51for(int i=d;i>0;i--)

52 printf("%d"

,ans[i]);

53 printf("\n"

);54

return0;

55 }

很經典的一道貪心題~

noip2012國王遊戲

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

NOIP2012 國王遊戲

題解 一開始看著題覺得是二分答案 最大值的最小值 後來發現不滿足單調性 再後來發現可以用貪心做 只需把大臣按照左手 右手公升序排序即可 證明 很顯然前面的大臣位置隨便調換對後面的大臣並沒有影響 那麼假設現在已經排了i 1個大臣,p a 1 a 2 a 3 a i 1 第i個大臣的錢w i p b i...

NOIP2012國王遊戲

用貪心可以解決。將所有人按左右手的乘積排序,這樣一定可以保證結果最優。現給出證明 首先,任意相鄰兩人的順序對於排在他們前面和後面的人沒有影響。顯然 兩人左右手上的數字分別為l 1 r 1 l 2 r 2 令l 1 r 1 若1在2前面,那麼兩人分得的金幣分別為sum r 1 sum l 1 r 2 ...