題意
給定一個字串 \(s\)。
設一個字串 \(t\) 是好的,當且僅當不存在一個 \(\text{Period}\) 能整除 \(|t|\)。
求最小的劃分段數使得每段都是好的,及最小的劃分段數的方案數。
Sol
考慮兩種特殊情況:
- \(s\) 有長度為 \(1\) 的 \(\text{Period}\)。
- \(s\) 本身就是好串。
前者答案顯然為 \((n, 1)\),後者答案為 \((1, 1)\)。
集中注意力,不難想到一個結論:
最小的劃分段數只會為 \(2\)。
顯然可以考慮對於某個不好的串,可以考慮將她的最後一個字母割開。
注意到對於後面的這個串,我們一定可以找到某一個字尾串,可以使得她是好的串。
否則若 \(s\) 的所有字尾都是不好的串,那麼 \(s\) 顯然存在長度為 \(1\) 的 \(\text{Period}\)。
因此,證明該結論即證:對於所有的 \(s'\) 與 \(s' + c\) (\(c\) 為一個字元),兩者不可能同為好串。
其實這個結論非常好證明。
首先,根據 \(\text{Periodicity Lemma}\) 可知:
若一個串有 \(\text{Period}\) \(p, q\),且 \(p + q \le |S| + \gcd(p, q)\),則 \(\gcd(p, q)\) 為該串的一個 \(\text{Period}\)。
顯然,對於 \(s'\) 的整除 \(|s'|\) 的 \(\text{Period}\) \(x\),與 \(s' + c\) 的 \(\text{Period}\) \(y\)。
\(x \le \frac{|s'|}{2}\),\(y \le \frac{|s'| + 1}{2}\),所以 \(x + y \le |S| + \gcd(x, y)\)。
又因為 \(x\) 為 \(s'\) 的一個 \(\text{Period}\),所以 \(\gcd(x, y)\) 為 \(s'\) 的一個 \(\text{Period}\)。
顯然 \(\gcd(x, y)\) 只能為 \(1\)。
對於長度為 \(1\) 的 \(\text{Period}\),已經被我們判過了。
所以結論成立。
對於第二問,考慮列舉每一個分割點,判斷前後兩段是否為好串即可。
根據 \(\text{Periodicity Lemma}\) 可知,直接判斷最小 \(\text{Period}\) 是否整除即可。