pojP1080 國王遊戲 貪心

2021-08-23 12:24:06 字數 1645 閱讀 9938

題目描述

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

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

輸入輸出格式

輸入格式:

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

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

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

輸出格式:

乙個整數,表示重新排列後的隊伍中獲獎賞最多的大臣所獲得的金幣數。

輸入樣例#1:

3 1 1

2 3

7 4

4 6

輸出樣例#1:

2說明

【輸入輸出樣例說明】

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

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

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

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

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

按 33 、 22 、 11 這樣排列隊伍,獲得獎賞最多的大臣所獲得金幣數為 99 。

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

【資料範圍】

對於 20%的資料,有 1≤ n≤ 10,0 < a,b < 81≤n≤10,0

#include 

#include

#define n 100005

using

namespace

std;

struct arr

a[n];

int b[n],n,len;

int cmp(arr p, arr q)

void mul(int x)

len = p;

if (!b[len]) len--;

}void div(int x)

while (!b[len]) len--;

}int main()

sort(a+1, a+n+1, cmp);

b[1] = a[0].x;

len=1;

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

mul(a[i].x);

div(a[n].y);

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

printf("%d", b[i]);

if (!len) printf("1");//這裡好像資料錯了不用在意

}

NOIP P1080 國王遊戲 貪心 高精度

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

luoguP1080 國王遊戲 (貪心 高精度)

參考 思路 這道題的考點是貪心和高精度。貪心部分 設這一段乘積為x1 設這一段乘積為y2 l1r1 設這一段乘積為x2 設這一段乘積為y2 l2r2 由上面這張 可以知道這樣的情況時 第一個人所得的金幣數為x1 r1 第二個人所得的金幣數為x1 l1 x2 r2 所以最小值為 max x1 r1,x...

P1080 國王遊戲

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