國王遊戲 貪心 大數相乘

2021-09-03 02:10:58 字數 2219 閱讀 6958

時間限制: 1 sec  記憶體限制: 128 mb

題目描述

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

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

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

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

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

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

複製樣例資料

3 1 1 2 3 7 4 4 6
樣例輸出

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 

對於40%的資料,有1≤ n≤20,0 

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

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

對於100%的資料,有 1 ≤ n ≤1,000,0 

證明貪心:

假設有兩個橙子a,b,並且到取完a,b後最大的獎賞為s,且前面的人左手乘積為w(左手為l,右手為r):

1.如果a在b的前面,那麼s =

2.如果b在a的前面,那麼s =

那麼到底選什麼呢?

然後因為n的值有1000,a,b的值有10000,那麼可能乘起來有4000位。。。大數相乘。。。。

/**/

#include #include #include #include #include #include #include #include #include #include #include #include typedef long long ll;

using namespace std;

int n;

int a, b;

char ans[4005] = "";

struct node

}e[10005];

bool judge(char *s, char *str)

return false;

}void mul(char s, int num1, int num2)

while(str[len - 1] == '0' && len > 1) len--;

str[len] = '\0';

if(strcmp(ans, "") == 0 || judge(str, ans))

ans[len] = '\0';

t = 0;

int lens = strlen(s);

for (int i = 0; i < lens; i++)else

} while(t)else

} s[lens] = '\0';

}int main()

sort(e + 1, e + 1 + n);

int cnt = 0;

char s[4005];

while(a)

s[cnt] = '\0';

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

int len = strlen(ans);

for (int i = len - 1; i >= 0; i--)

printf("\n");

return 0;

}/**/

國王遊戲 貪心 大數

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

AcWing 114 國王遊戲 貪心 大數處理

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

貪心演算法 國王遊戲

孫悟空給花果山的小猴子們分桃子。首先,他讓每只小猴在左 右手上面分別寫下乙個整數,悟空自己也在左 右手上各寫乙個整數。然後,讓這 n 隻小猴排成一排,悟空站在隊伍的最前面。排好隊後,所有的小猴都會獲得一些桃子,每只小猴獲得的桃子數分別是 排在該小猴前面的所有猴子的左手上的數的乘積除以他自己右手上的數...