終於過了。。。。。這道高精度總算是過了,為了這道題我還特意去學了高精度除以搞精度(雖然最後只需要高精度除以低精度)
這道題都是看新番國王遊戲的時候突發奇想跑來做的qaq。。。。
這道題的貪心思路是,按照左右手相乘來從小到大排序,乘積相同就按照右手從小到大。。。
至於為什麼這麼貪心,我個人的想法是,將右手數大的盡量排後面(除數比較大),然後也要讓左手大的靠後(被除數小),
具體的證明可以看看這個部落格:
然後排了序就是高精度除法,然後和當前的ans來比較,接著高精度乘法。。。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9view code#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 }
【總結】
回顧了一下歷年的考題,發現高精度其實考的不是很多。。但是這還是挺重要的方法,可以去學學。。
這乙份**中的高精度除以低精度都是我從今年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位大臣排 成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每 位大臣獲得...