PAT1010

http://pat.zju.edu.cn/contests/pat-a-practise/1010

這是PAT通過率最低的一道題,只有0.07。就是給出2個數字,以及其中一個數字的基數,問在什麼基數下,另一個數能夠與之相等。


直接想法是將其中一個數字轉化爲計算機內部表示的數值,然後不斷嘗試另一個數字的基數,但是這樣會不會超過 long long的表示範圍呢?

題目中說給出的數字不超過10位,對基數(radix)沒有限制,因此數值可能是無限大,應當用大數做,但是如果真的這樣做,就被坑了。因爲數據比較弱,人家long long就能過,你還在寫大數,時間來不及。

所以此題應當補充一個條件,待比較數n在long long 範圍內。一旦有此條件,我們可以推斷,基數r也一定在long long 範圍內,所以可以定義爲long long,因爲如果S只有1位,r最多也就36,如果S大於1位,r不會超過待比較數n。

1,將其中一個數轉化爲long long,待比較,記爲n,目標數的字符串記爲S,其基數爲r;

2,估算基數r下界;

基數合法的下界應該是min(2,S中最大位+1),我在估算下界時wa了幾次,一次是直接把2作爲下界了,一次是S中最大位沒有加1。

3,估算基數r上界;

在S至少有2位的情況下,目標數一定大於等於基數,因此基數大於待比較數n就沒有意義了,此時上界是n。如果只有1位,單獨處理。

4,二分法查找基數;

超時了一次就是因爲沒用二分法。因爲數值和基數之間是正相關的,所以可以利用這個性質。每次比較返回一個結果,大於還是小於,當計算目標數爲負,可以知道越界了,那麼一定大於待比較數n,這點我沒注意得了個wa。

5,當字符串只有1位時可能有多個答案,取最小,需要單獨處理。

我又得了個wa,此時只要計算當r比較S所表示的數+1時的目標值就行了。


一共5個地方沒注意,本人通過率爲17%。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章