)的做法:
考慮逐位確定:對於每個位置,往後列舉有沒有位置可以使得正確位置更多,如果有,那麼有兩種情況,1是這個位置被放到了正確的位置,2是這個位置本來應該放的數被放來了
這裡的重點是我們需要區分1和2:
具體的做法是記下讓這個位置答案正確位置數變大的2個位置,將其和i一起移位
這裡是手繪示意圖.即把p1放到i,p2放到p1,將i放到p2,然後再次詢問
如果返回值和什麼都不做相比變小或相等:
說明i這個位置應該放p2,p1這個位置應該放i
否則:說明i這個位置應該放p1,p2這個位置應該放i
證明考慮討論p1還是p2應該放在i上
#include
"game.h"
using
namespace std;
std :: vector<
int>
guess
(int n,
int limit)
next_permutation
(ans.
begin()
,ans.
end())
;}}for
(int i=
0;i)swap
(ans[i]
,ans[j]);
if(pos2!=-1
)break;}
if(pos1==-1
)continue;if
(pos2==-1
)else
else}}
return ans;
}
一道fft練習題
考場上想到的o n 2 o n 2 o n2 暴力 記f i j f i j f i j 表示前i個位置,長度為j的連擊出現的期望次數 記g i j g i j g i j 表示第到i個位置為止,目前連擊次數為j的概率 轉移時有一些細節 include using namespace std con...
一道sam練習題
考慮答案實際上是每個子串的出現次數的平方和.這個可以通過手玩樣例驗證.考慮廣義sam 先將所有字串建成trie,然後再在trie上bfs,建出sam.考慮fail樹 每次插入乙個新節點,會改變從這個節點開始到根的路徑上的每個節點的right集合大小.所以考慮樹剖維護這種操作,然後每乙個單詞的答案就是...
一道線段樹練習題
e9首先我們有乙個考慮列舉每個mex,計算其貢獻的想法.即有多少個區間的mex mexme x是我們當前列舉的這個值.然後我們手畫一下圖,可以發現,乙個數如果想要成為乙個區間的mex mexme x,必須要這個區間已經出現了所有比它小的數.所以可以從小到大列舉mex mexme x,然後用r rr陣...