這道題用到了貪心的思想,與簡單的貪心不同,最優解並不能一眼就看出來,需要通過列式比較。我們設想對於任意的兩位大臣x和y,他們兩個的排列順序會對答案有影響。假設國王和之前的大臣左手上的數乘積為pre,若x排在y前,ans1=max(pre/x.b,pre*x.a/y.b),ans2=max(pre/y.b,pre*y.a/x.b)。因為必有pre*x.a/y.b>pre/y.b,pre*y.a/x.b>pre/x.b,若要ans1有了以上分析就可以有60分,但本題ans的最大值可以達到10^5000左右!!!要用高精度,這才是最坑的。弄了好久才過去,藉著這個契機,好好改改我的高精度模板。。。
1 #include2 #include3 #include4 #includeac**5using
namespace
std;
6const
int maxn=1005,maxl=5005;7
intn,ka,kb;
8struct
biginteger
14bool
operator
< (const biginteger& rhs) const
20else
return len
22void
operator * (const
int& rhs)
29 len+=15;30
while(!num[len]&&len>1) --len;31}
32 biginteger operator / (const
int& rhs) const
38while(!ans.num[ans.len]&&ans.len>1) --ans.len;
39return
ans;40}
41void
print()
44} now,ans;
45struct
minister
50} m[maxn];
51int
main()
60ans.print();
61return0;
62 }
noip2012國王遊戲
game.cpp c pas 問題描述 恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右 手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n位大臣排 成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每 位大臣獲得...
NOIP2012 國王遊戲
題解 一開始看著題覺得是二分答案 最大值的最小值 後來發現不滿足單調性 再後來發現可以用貪心做 只需把大臣按照左手 右手公升序排序即可 證明 很顯然前面的大臣位置隨便調換對後面的大臣並沒有影響 那麼假設現在已經排了i 1個大臣,p a 1 a 2 a 3 a i 1 第i個大臣的錢w i p b i...
NOIP2012國王遊戲
用貪心可以解決。將所有人按左右手的乘積排序,這樣一定可以保證結果最優。現給出證明 首先,任意相鄰兩人的順序對於排在他們前面和後面的人沒有影響。顯然 兩人左右手上的數字分別為l 1 r 1 l 2 r 2 令l 1 r 1 若1在2前面,那麼兩人分得的金幣分別為sum r 1 sum l 1 r 2 ...