洛谷P1080 國王遊戲 高精度

2022-06-23 14:09:13 字數 2761 閱讀 8237

題目連結

題目描述恰逢

h h

國國慶,國王邀請

n' role="presentation">n

n 位大臣來玩一個有獎遊戲。首先,他讓每個大臣在左、右手上面分別寫下一個整數,國王自己也在左、右手上各寫一個整數。然後,讓這

n n

位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是:排在該大臣前面的所有人的左手上的數的乘積除以他自己右手上的數,然後向下取整得到的結果。

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

輸入輸出格式

輸入格式

第一行包含一個整數

n' role="presentation">n

n,表示大臣的人數。

第二行包含兩個整數

a a

和 b' role="presentation">b

b ,之間用一個空格隔開,分別表示國王左手和右手上的整數。

接下來

n n

行,每行包含兩個整數

a' role="presentation">aa和

b b

,之間用一個空格隔開,分別表示每個大臣左手和右手上的整數。

輸出格式

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

輸入

3 

1 1

2 3

7 4

4 6

輸出

2
解題思路:

本題主要考察貪心和高精度。國王的位置始終是定的,根據大臣之間不同的排序決定最後拿到最多獲賞的大臣儘可能的少,現在不妨假設相鄰的第

i' role="presentation">ii和第

j j

個大臣前面已經累積了to

tal' role="presentation">tot

alto

tal,若保證獲獎時

i i

得到的金幣儘可能的少於

j' role="presentation">jj。即

tota

l∗ha

nd[i

].l/

hand

[j].

r<=to

tal∗

hand

[j].

l/ha

nd[i

].r tot

al∗h

and[

i].l

/han

d[j]

.r

<=to

tal∗

hand

[j].

l/ha

nd[i

].

r轉化過來即是:ha

nd[i

].l∗

hand

[i].

r<=ha

nd[j

].l∗

hand

[j].

r han

d[i]

.l∗h

and[

i].r

<=ha

nd[j

].l∗

hand

[j].

r故直接對ha

ndh an

d結構體按上述規則排序即可,同時連乘時需要高精度。

最後注意到金幣最多的不一定是最後一個大臣,例如:

3

9999 1

1 11 1

1 9999 排序之後最後一名大臣得到金幣不一定是最多的

所以排序完成之後對每個大臣進行計算時,需要對最多的金幣數量進行更新。

**部分:

#include 

#include

#include

using

namespace

std;

#define maxn 1000

struct handha[n];

bool cmp(hand &a,hand &b)

struct bignum

void

set(int x)while(x!=0);

}void print()

printf("\n");

}bignum operator * (int &x)

if(carry)

return ans;

}bignum operator / (int &x)

ans.size=0;

for(int j=0;jif(ans.digit[j]!=0)

ans.size=j;//找到最高位

}ans.size++;

return ans;

}bool

operator

< (bignum &a)

if(j==0)

return

false;}}

}a,b;

int main()

洛谷 P1080 國王遊戲

恰逢 h國國慶,國王邀請n 位大臣來玩一個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下一個整數,國王自己也在左 右手上各寫一個整數。然...

洛谷P2142 高精度減法

高精度減法 輸入格式 兩個整數a b 第二個可能比第一個大 輸出格式 結果 是負數要輸出負號 輸入樣例 1 複製2 1 輸出樣例 1 複製1...

洛谷P1018 乘積最大 dp 高精度

題目大意 給定一個 n 個陣列成的串,可以在串中插入 m 個乘號,求乘積最大是多少。n 40 階段 前 i 個數用了 j 個乘號。 僅用階段可以表示出一個狀態,因此狀態轉移方程為 dp i j max 。 如下 include using namespace std const int maxn 5...