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

2022-05-07 10:42:09 字數 1658 閱讀 2907

終於過了。。。。。這道高精度總算是過了,為了這道題我還特意去學了高精度除以搞精度(雖然最後只需要高精度除以低精度)

這道題都是看新番國王遊戲的時候突發奇想跑來做的qaq。。。。

這道題的貪心思路是,按照左右手相乘來從小到大排序,乘積相同就按照右手從小到大。。。

至於為什麼這麼貪心,我個人的想法是,將右手數大的盡量排後面(除數比較大),然後也要讓左手大的靠後(被除數小),

具體的證明可以看看這個部落格:

然後排了序就是高精度除法,然後和當前的ans來比較,接著高精度乘法。。。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9

#define maxn 10005

10using

namespace

std;

11int

n;12

struct

nodee[maxn];

15int comp(const

void*a,const

void*b)

2021

intans[maxn],s[maxn],val[maxn];

2223

void div(int s,int q,int

val)

24p[0]=s[0

];29 rest=p[1];int i=2;30

while(rest0

])34

if(rest0]=1;val[1]=0;return

;}35

else43}

44 val[0]=tot;45}

4647

void

change()

5152

void compare(int val,int

ans)else

else

return;62

}63}64

}65}66

67void mul(int s,int

k)69

for(int i=1;i<=s[0];i++)74}

75while(s[s[0]+1

])80}81

82int

main()

88 qsort(e+1,n,sizeof(e[1

]),comp);

89int k=e[0].l,tot=0;90

while(k)

91 s[0]=tot;

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

98for(int i=1;i<=ans[0];i++)

99 printf("%d"

,ans[i]);

100 }

view code

【總結】

回顧了一下歷年的考題,發現高精度其實考的不是很多。。但是這還是挺重要的方法,可以去學學。。

這乙份**中的高精度除以低精度都是我從今年noip2017提高組初賽試題學到的。。另外我順便還積累了高精度除以高精度,確實很有用。。

然後卡了我很久的錯誤點就是那個比較環節。。。。比較環節位數相同時,逐位比較,有一位小於等於ans就break,不然就替換。。我就是忘記了跳出,所以一直卡著剩下的40%資料過不了

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

我是不會說我考試的時候想到了正解卻把金幣取大看成金幣求和的.覺得只按左右手乘積排序不太對 有反例 也可能我反例放到這個題裡是錯的吧 按自己的理解排的序 就是各種討論.假設 第i個人是x1 y1 第i 1個人是x2 y2 前面所有的左手乘積為s 我們通過考慮這兩個人決定排序的規則 答案就是 min m...

NOIP2012 貪心 高精度 國王遊戲

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

noip2012國王遊戲

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