計蒜之道2016 遺失的支付寶密碼 解題報告

TA201314發表於2016-06-14

感覺這題好厲害。。

我考試的時候一直在想kmp、sa之類的,完全想偏了。。想到容斥也沒有想到可以這麼搞。
注意到其實square說的是字元之間的相等關係。所以如果我們考慮至少有哪幾個位置是square,那麼就可以求出字串中有幾種不同的字元,那麼方案數就是m

m^{不同字元種數}
了。至於字元種數,顯然可以通過並查集求出來。
這樣時間複雜度是O(n22n2log2n)
O(n^22^{n \over 2}\log_2n)
,就可以做n=40的點了。

而更神奇的地方在於不同的字元相等關係的數量非常少,n=100的時候只有幾萬!所以我們就可以對每種相等關係dp它的容斥係數。這樣時間複雜度大約是O(n3100000log2n)

O(n^3*100000*log_2n)
的,但其實跑得挺快的。。100的話大約需要十幾秒吧。
這樣似乎還是A不了,但是注意到其實我們可以按照字串長度和不同種字元數量打表,這樣就搞定啦!
程式碼:

#include<cstdio>
int cnt[51][101]={1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1,1,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,2,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,1,1,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,-1,0,2,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,-3,0,-1,0,0,1,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-3,0,-1,1,1,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,-1,0,-1,0,-3,0,0,2,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,-1,-1,-1,-1,0,-3,1,1,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,-1,-1,-2,-1,-1,0,-2,2,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,0,0,1,-1,-2,-2,-1,-1,1,-1,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,1,0,0,-1,1,-2,-2,-2,-1,0,2,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,0,-1,-1,0,-2,-2,-2,0,1,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-3,6,1,1,-1,2,0,-1,-1,-2,0,-2,-2,-1,1,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-2,2,1,6,-1,0,-1,2,-1,-1,-2,-2,0,-2,-1,0,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,4,0,4,0,5,-2,0,-1,1,-1,-2,-2,-2,0,-1,0,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,4,-2,5,1,2,0,4,-2,0,-2,1,-2,-2,-2,-2,1,0,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,7,-3,6,-2,5,0,2,-1,4,-2,-1,-2,0,-2,-2,-2,-1,2,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-5,0,-1,9,-3,5,-1,4,0,1,-1,4,-3,-1,-3,0,-2,-2,-1,0,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,4,-2,3,1,8,-5,7,-2,4,-1,1,-1,3,-3,-2,-3,0,-2,-1,0,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,0,-4,8,0,4,-1,7,-3,6,-2,3,-1,1,-2,3,-4,-2,-3,0,-1,0,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,0,-4,3,-1,9,0,3,-2,9,-4,6,-3,3,-1,0,-2,2,-4,-2,-3,1,0,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-2,-1,0,-1,6,-1,8,0,2,0,8,-4,5,-3,3,-2,0,-3,2,-4,-2,-2,2,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-4,-2,2,0,2,1,5,-1,8,-1,4,-1,8,-5,5,-3,2,-2,-1,-3,2,-4,-1,-1,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,-3,-3,-1,1,3,1,3,1,5,-1,7,1,3,-1,7,-5,5,-4,2,-3,-1,-3,2,-3,0,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-5,-7,-5,0,1,1,2,3,1,4,1,5,-2,9,0,3,-2,7,-5,4,-4,1,-3,-1,-3,3,-2,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-6,-3,-3,-2,3,3,1,1,4,2,4,1,4,0,8,0,2,-2,7,-6,4,-5,1,-3,-1,-2,4,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-3,-11,-3,-4,-1,0,1,4,2,1,2,5,2,4,0,6,-1,8,-1,2,-2,6,-6,3,-5,1,-3,0,-1,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-5,-11,1,-8,-1,-1,1,3,1,2,3,2,3,5,2,3,2,5,-1,7,-1,2,-3,6,-7,3,-5,1,-2,1,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-18,-2,-7,4,-7,2,1,3,2,0,3,4,3,3,5,1,5,1,5,-2,7,-1,1,-3,5,-7,3,-5,2,-1,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-11,-5,-13,0,-2,4,-4,3,2,3,1,1,4,5,3,3,4,3,4,1,4,-2,7,-2,1,-4,5,-7,3,-4,3,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,-20,-2,-10,-1,-10,4,-2,7,-4,3,3,2,2,2,5,5,3,2,6,2,4,0,4,-2,6,-2,0,-4,5,-7,4,-3,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,-18,3,-14,-5,-6,2,-6,4,0,6,-3,4,2,3,3,3,5,5,2,4,5,2,3,0,4,-3,6,-3,0,-4,5,-6,5,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,-23,-1,-16,6,-15,0,-4,6,-7,5,0,7,-2,3,3,4,4,3,5,4,4,3,5,1,3,0,3,-3,5,-3,0,-4,6,-5,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,-20,5,-21,1,-14,5,-10,2,0,4,-7,6,1,8,-3,4,4,5,4,3,4,6,3,3,4,1,3,-1,3,-4,5,-3,0,-3,7,-6,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,-29,5,-19,8,-22,6,-16,10,-8,5,-3,5,-6,7,2,7,-2,5,5,5,4,2,6,5,3,2,4,1,2,-1,2,-4,5,-3,1,-2,6,-6,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,-15,0,-26,3,-15,9,-18,4,-11,11,-6,3,-2,6,-5,8,1,8,-1,6,5,5,3,4,5,5,2,2,4,0,2,-2,2,-4,5,-2,2,-3,6,-6,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,-35,5,-16,7,-29,5,-13,13,-20,9,-11,12,-7,4,-1,7,-4,7,2,9,0,6,5,4,5,3,5,4,2,2,3,0,1,-2,2,-4,6,-1,1,-3,6,-6,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,-23,3,-29,3,-13,6,-25,6,-9,11,-16,8,-9,11,-6,5,0,8,-5,8,3,10,0,6,4,6,4,3,4,4,2,1,3,-1,1,-2,2,-3,7,-2,1,-3,6,-6,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,-26,11,-34,11,-32,7,-14,10,-24,10,-12,14,-16,10,-10,12,-5,6,1,7,-4,9,4,10,0,5,6,5,4,2,4,4,1,1,2,-1,1,-2,3,-2,6,-2,1,-3,6,-6,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,-25,7,-25,8,-29,6,-26,6,-10,11,-20,6,-10,15,-14,9,-9,13,-4,7,0,8,-3,10,4,10,-1,7,5,5,3,2,4,3,1,0,2,-1,1,-1,4,-3,6,-2,1,-3,6,-6,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,-38,14,-29,12,-33,15,-33,12,-27,10,-9,14,-25,9,-9,17,-15,10,-8,14,-3,6,1,9,-2,10,4,9,1,6,5,4,3,2,3,3,0,0,2,-1,2,0,3,-3,6,-2,1,-3,6,-6,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,36,-19,12,-42,14,-25,5,-27,12,-27,11,-23,10,-7,10,-22,10,-7,16,-14,11,-7,15,-4,7,2,10,-2,10,3,11,0,6,4,4,3,1,3,2,0,0,2,0,3,-1,3,-3,6,-2,1,-3,6,-6,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,46,-33,18,-32,16,-43,15,-30,12,-30,18,-28,15,-24,11,-10,13,-21,12,-8,17,-13,12,-6,14,-3,8,3,10,-2,9,5,10,0,5,4,4,2,1,2,2,0,0,3,1,2,-1,3,-3,6,-2,1,-3,6,-6,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,47,-25,22,-45,15,-28,13,-40,9,-22,9,-24,17,-25,13,-22,8,-7,14,-19,11,-7,18,-12,13,-7,15,-2,9,3,10,-3,11,4,10,-1,5,4,3,2,0,2,2,0,1,4,0,2,-1,3,-3,6,-2,1,-3,6,-6,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,0,0,54,-28,22,-38,22,-48,16,-31,18,-46,17,-25,15,-26,19,-26,15,-25,11,-6,16,-20,12,-6,19,-11,12,-6,16,-1,9,3,9,-1,10,4,9,-1,5,3,3,1,0,2,2,1,2,3,0,2,-1,3,-3,6,-2,1,-3,6,-6,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,0,0,52,-21,25,-42,22,-34,13,-46,15,-27,13,-38,14,-19,12,-25,19,-24,12,-22,12,-4,15,-19,13,-5,20,-12,13,-5,17,-1,9,2,11,-2,10,3,9,-1,4,3,2,1,0,2,3,2,1,3,0,2,-1,3,-3,6,-2,1,-3,6,-6,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1,0,0,0,59,-26,26,-35,21,-43,26,-43,15,-47,20,-32,21,-41,19,-23,14,-25,21,-27,15,-21,14,-5,16,-18,14,-4,19,-11,14,-4,17,-1,8,4,10,-2,9,3,9,-2,4,2,2,1,0,3,4,1,1,3,0,2,-1,3,-3,6,-2,1,-3,6,-6,4,-4,2,-2,0,-2,3,-3,-1,-2,1,-1,-1,-1,-1,1,-1,-1,-1,0,0,1,-2,1,0,1,0,0,1,0,1,0,0,0,-1,-1,1};
int main(){
    int n,m;
    int power[105];
    power[0]=1;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;++i)power[i]=power[i-1]*m;
    int ans=0;
    for(int i=1,tmp=1;i<=n;++i)
        if(i&1)ans+=tmp*m;
        else{
            tmp=0;
            for(int j=1;j<=i;++j)tmp+=power[j]*cnt[i>>1][j];
            ans+=tmp;
        }
    printf("%u\n",ans);
}

總結:
①字串的題也不一定非要用字串演算法/資料結構嘛。可以直接考慮字元間的相等/不等關係。

相關文章