洛谷 P1080 國王遊戲

2021-08-08 16:24:06 字數 2370 閱讀 7938

原題

題目描述

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

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

輸入輸出格式

輸入格式:

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

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

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

輸出格式:

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

輸入輸出樣例

輸入樣例#1:

3 1 1

2 3

7 4

4 6

輸出樣例#1:

說明【輸入輸出樣例說明】

按 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 提高組 第一天 第二題

這是一道高精度練手的好題,也是noip2012的良心(2016就毫無良心!!!),這道題目就只要乙個貪心然後高精度模擬就可以了,值得注意的是:如果最後的答案是0,你需要把他變成1!!!

貪心策略正確性的證明:第i個大臣左右手寫的是a,b第j個大臣左右手寫的是

x,y,i之前的左手分數為q,i->j之間為p那麼現在最大分數是

max(q/b,q*a*p/y) 化簡以後:max(1/b,a*p/y)又因為是向下取整所以

1/a==0,1一定小於x*p/y(至於1的情況 自己手寫一下發現並不影響)同理

交換之後 max(q/y,q*p*x/b)->max(1/y,p*x/b)->p*x/b即是比較

min(p*x/b,a*p/y)->min(x/b,a/y)要求x/b x*y衝要條件

所以**ac就是理所當然的了!

#include

#include

#include

#include

#include

using

namespace

std;

int a[100010],b[100010],mod,c[100010];

struct nodein[100010];

int cmp(node a,node b)

for(i=1;iint lenb=0;

while(in[i].a)

memset(c,0,sizeof(c));

int lenc=lena+lenb;

for(j=1;j<=lena;j++)

if(x)c[j+lenb]=x;

}while(c[lenc]==0 && lenc>1)lenc--;

lena=lenc;

for(j=1;j<=lena;j++)

a[j]=c[j];

}int x=0;

mod=in[n].b;

memset(c,0,sizeof(c));

int flag=0;

for(i=lena;i>=1;i--)

while(lena>1 && c[lena]==0)lena--;

if(lena==1 && c[lena]==0)printf("1\n");

else

puts("");

return

0;}

洛谷P1080 國王遊戲

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

洛谷P1080 國王遊戲

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

洛谷 P1080 國王遊戲

這是一道貪心題,貪心的策略是將大臣們按左右手金幣的乘積公升序排列,具體證明過程可以參見洛谷大佬的題解,這裡就不再贅述了。因為本菜雞之前沒有接觸過高精度運算,對c 的運算子過載也不太熟練,所以正好藉此機會記錄一下用到的高精度模版。模版框架參考於 然而,直接複製該模版會導致tle,原因在於這道題只需要高...