[ARC060F] Best Representation

cxqghzj發表於2024-04-08

題意

給定一個字串 \(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}\) 是否整除即可。

相關文章