noip 2012 國王遊戲(貪心 高精)

2022-05-15 18:24:40 字數 1407 閱讀 1149

/*

我是不會說我考試的時候想到了正解卻把金幣取大看成金幣求和的....

覺得只按左右手乘積排序不太對 有反例 也可能我反例放到這個題裡是錯的吧

按自己的理解排的序 就是各種討論...

假設 第i個人是x1 y1 第i+1個人是x2 y2 前面所有的左手乘積為s

我們通過考慮這兩個人決定排序的規則

答案就是 min(max(s/y1,s*x1/y2),max(s/y2,s*x2/y1))

拿掉s並通分就是 min(max(y2,x1y1),max(y1,x2*y2))

因為每個max裡的值不是只來自乙個人 所以不能簡單地通過某個值或某幾個值來排序

那就討論吧 ^ ^

接下來就是神奇(噁心)的高精...

*/#include

#include

#include

#include

#define maxn 1010

using

namespace

std;

int n,ans[maxn*5],s[maxn][maxn*5

],l[maxn];

struct nodep[maxn];

int cmp(node const &x,const node &y)

else

}void mul(int k,int

x)

while(a[len+1

])

for(int i=1;i<=len;i++)s[k+1][i]=a[i];

l[k+1]=len;

}void del(int k,int

x)

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

if(b[i]!=0

)

l[k]=t;

for(int i=1;i<=len;i++)s[k][i]=b[i];

}void big(int

k)

else

if(l[k]0])return

;

else

if(falg==0)return

;

for(int i=1;i<=l[k];i++)

ans[i]=c[i];

ans[

0]=l[k];

}}int

main()

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

mul(i-1

,p[i].l);

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

for(int i=ans[0];i>=1;i--)

printf("%d

",ans[i]);

return0;

}

NOIP2012 貪心 高精度 國王遊戲

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

noip2012 國王遊戲《貪心 高精度》

終於過了。這道高精度總算是過了,為了這道題我還特意去學了高精度除以搞精度 雖然最後只需要高精度除以低精度 這道題都是看新番國王遊戲的時候突發奇想跑來做的qaq。這道題的貪心思路是,按照左右手相乘來從小到大排序,乘積相同就按照右手從小到大。至於為什麼這麼貪心,我個人的想法是,將右手數大的盡量排後面 除...

noip2012國王遊戲

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