洛谷 P1080 國王遊戲(貪心 高精 排序)

2021-09-26 14:19:28 字數 1435 閱讀 4068

題目:

標籤:貪心、高精、排序

【題解】

參考dalao的推導過程:

有中間兩個人 i 和 i+1,顯然他們倆怎麼排對後面沒有影響(因為只跟乘積有關)

記 p 為國王到 i-1 個人的 左手數的乘積

所以若不換的話,顯然 max < max

–> 否則換更優

即不換的最大值《換的最大值

兩邊都除以p得 max < max

兩邊同時乘以b[i]*b[i+1]得 max < max

顯然 顯然a[i]*b[i]>b[i],所以 max < a[i+1]*b[i+1]

(因為無論哪個左邊的數都大於b[i])

同理因為 a[i]*b[i]>b[i] 所以原式為 a[i]*b[i]接下來就是處理高精度了。

muti( ) 是處理高精度乘法,處理某個大臣前面的所有人左手上的數的乘積。

div( ) 是處理高精度除法,處理某個大臣前面的所有人左手上的數的乘積,除以他自己右手上的數,然後向下取整得到的結果。

compare( ) 是比較 div( ) 處理後的結果和當前的最大值。

ac**:

#include

#include

#include

using

namespace std;

struct nodes

node[

1005];

//sum儲存當前的高精度,max儲存最大的高精度,temp儲存除后的臨時高精度

int sum[

10005]=

, max[

10005

], temp[

10005];

//lsum是sum的長度,ltemp是temp的長度,lmax是max的長度。

int lsum =

1, ltemp, lmax =0;

bool

cmp(nodes a, nodes b)

void

muti

(int d)

while

(t !=0)

}void

div(

int d)

while

(ltemp >

1&& temp[ltemp -1]

==0) ltemp--;}

void

compare()

else

if(ltemp == lmax)}}

intmain()

for(

int i = lmax-

1; i >=

0; i--

) cout << max[i]

;return0;

}

洛谷P1080 國王遊戲 貪心 高精度

p1080 國王遊戲 啊啊啊,剛才已經寫了一次了,但是edge瀏覽器不知道為什麼卡住了,難受。好吧,其實是一道可做題,分析得到的貪心策略就是就是將a b小的放在前面 其他的懶得說了 主要還是要會高精度,要不然寫不出來。ac 借鑑題解大佬的,我自己寫不出來,主要是高精度不太會 include incl...

洛谷 P1080 國王遊戲

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

洛谷P1080 國王遊戲

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