傳送門 loj2863
果然簽到題就是好玩
首先我們可以猜2次來猜出第乙個字元是什麼,後面的串就和這個字元沒關係了。
假設剩下的三個字元是tmp[0]
,tmp[1]
,tmp[2]
,目前已知答案串的長度為i−1
i-1i−
1的字首是ans
。考慮第i
ii位(i≤n
−1
i\leq n-1
i≤n−
1),我們可以在ans
串後面接上乙個字元然後press
來檢查有沒有獲得更多的金幣,但是這樣的話你總共要press
大約3n3n
3n次,不夠理想。
我們可以設計一種方法來一次就獲得s[i]
是什麼字元,那就需要設計乙個串p
使得對於不同的s[i]
,press(p)
的返回值不同。我們可以令p=ans+tmp[0]+ans+tmp[1]+tmp[0]+ans+tmp[1]+tmp[1]+ans+tmp[1]+tmp[2]
,那麼如果press(p)
返回的是i−1
i-1i−
1就說明第i
ii位是tmp[2]
,如果返回值是i
ii就說明第i
ii位是tmp[0]
,否則就是tmp[1]
。
對於最後一位,再press
兩下就行了。
#include
"combo.h"
#include
char tmp[3]
;std::string guess_sequence
(int n)
else
std::string ans; ans +
= first;
if(n ==1)
return ans;
for(
int i =
2; i < n;
++i)if(
press
(ans + tmp[0]
)== n) ans +
= tmp[0]
;elseif(
press
(ans + tmp[1]
)== n) ans +
= tmp[1]
;else ans +
= tmp[2]
;return ans;
}
IOI2018 組合動作
題目 我是垃圾 最開始覺得可以三次問出第一位,之後還有 n 1 位和 n 1 次詢問,只需要一次確定一位就好了 之後就發現我是垃圾,上來直接press ab 如果不是 0 那麼首位就是 a 或 b 否則就是 x 或 y 之後再問一次就好了 之後我們需要用 n 次確定 n 1 位,於是就開始大躍進了 ...
LeetCode 39 組合總和 題解
給定乙個包含無重複元素的陣列candidates和乙個目標數target,找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的數字可以無限制重複被選取。vectorint res void dfs int depth,int target,vector ...
LeetCode題解(python) 77 組合
leetcode題解 python 77.組合 給定兩個整數 n 和 k,返回 1 n 中所有可能的 k 個數的組合。示例 輸入 n 4,k 2 輸出 2,4 3,4 2,3 1,2 1,3 1,4 解題心得本題是組合問題,顯然要用遞迴回溯的方法。首先找到規律,要從n個元素中取k個元素,可以視為 1...