在乙個只包含 \(a,b\) 的字串中選擇乙個序列,使得
位置和字元都關於某條對稱軸對稱。
不能是連續的一段。
求有多少個滿足要求的序列,答案對 \(1e9+7\) 取模。
\(n\le 10^5\)
upd:修改了部分內容。
首先列舉對稱軸,假設我們以 \(k\) 為對稱軸。
設 \(p_k\) 為滿足 \(i並且 \(i,j\) 關於 \(k\) 對稱的 \((i,j)\) 的個數。
那麼對於這 \(p_k\) 個 \((i,j)\),\(a_i\) 與 \(a_j\) 要麼同時選(因為對稱所以必定滿足),要麼同時不選,共 \(2^\) 種方案。扣掉空集,共 \(2^-1\) 種。
\[\therefore ans=\sum\limits_^2^-1
\]注意一下這裡 \(k\) 可以為 \(\dfrac(t\in \mathbb)\),因為對稱軸可以為兩個字元中間(比如 \(1,8\) 就關於 \(4.5\) 對稱,也就是 \(4,5\) 的中間對稱)
這裡有個關於位置對稱的性質:
\(i,j\) 關於 \(p\) 對稱當且僅當 \(i+j=2x\)。我們可以根據這個轉移。
現在位置對稱了,還要滿足字元對稱。
記字元 \(a\) 為 \(1\),字元 \(b\) 為 \(0\)。
那麼可以發現當兩字元相等時僅可能為 \(1+1=2(aa)\) 或 \(0+0=0(bb)\)。而對於 \(1+0=1(ab)\) 的情況則需要排除。
由於 \(aa\) 和 \(bb\) 的情況的數值中間相差了 \(ab\),難以判斷是否對稱。
這裡有個很好用的東西:平方。
平方可以消去數值的負號。
所以我們可以將 \(aa,bb,ab\) 所代表的數值各消去 \(1\) ,那麼變為 \(1,-1,0\);此時再將它們都平方,那麼對稱的即變為 \(1\),不對稱的還是 \(0\),很好地滿足了我們的要求。
\[\therefore p_=\sum\limits_(a_i+a_j-1)^2
\]非常顯然的卷積,\(\text\) 一捲即可。
但題目中還說「位置不能連續」,說明要扣掉連續的回文子串的個數。
對於回文的對稱的子串顯然,用 manacher 一弄就好了。
萬徑人蹤滅(FFT manacher)
傳送門 這題 我覺得像我這樣的菜雞選手難以想出來 題目要求求出一些子串行,使得其關於某個位置是對稱的,而且不能是連續一段,求這樣的子串行的個數。這個直接求很困難,但是我們可以先求出所有關於某個位置對稱的子串行,最後減去子串的個數。子串個數可以用 manacher 求,至於子串行的話,我們假設以第 i...
20178 27 萬徑人蹤滅 思考記錄
字串的題也可以fft 只要能化成卷積的形式就都可以fft 比如這裡的回文 對乙個位置 1 1 2 2 他們和相等,所以對a跑一邊,對b跑一遍,就相當於建出n次多項式然後求係數 注意manacher不要寫錯,漏寫最後一句 注意fft最後一句要寫在外面 碼 include include include...
BZOJ3160 萬徑人蹤滅
對於每個可以作為對稱軸的位置,我們算出以其為對稱軸有多少對位置和字元是對稱的,設為t i 若不考慮不能連續,則我們可以從這t i 對里任選出來任意對,都是可行的答案,且不重不漏,所以不考慮不能連續的情況的答案為sigma 2 t i 1,考慮不能是連續子串,再減去回文子串的數量即可 回文子串數量ma...