Atcoder Regular Contest 060 F题第一问答案证明

Posted mleautomaton

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Atcoder Regular Contest 060 F题第一问答案证明相关的知识,希望对你有一定的参考价值。

一切的开始

(x) 为字符串,(p) 为正整数。如果对于满足 (0le i<|x|?p) 的任何整数 (i) 满足 (x[i]=x[i+p]),则 (p) 称为 (x) 的周期。(x) 的最小周期表示为 (per(x))。例如,(per(abcabcabcab)=3)

(N) 为输入字符串 (w) 的长度。 情况划分如下:

(a)如果 (w) 是一个好的字符串(例如 (w=ababa)
(b)当 (per(w)=1) 时(例如 (w=aaaaa)
(c)其他情况(例如 (w = abcabcabc)

在(a)的情况下,最佳表达明显为 (1),最佳表达的为 (1)
在(b)的情况下,最佳表达为 (N),最佳表达的为 (1)
在情况(c)中,我们可以证明最佳表达为 (2)(请参见下面的定理 (5))。

定理 2

( ext{KMP}) 或者 ( ext{Z-Algorithm}) 可知,如果正整数 (p,q) 是字符串 (x) 的周期,且 (p+q-gcd(p,q)le |x|),则 (gcd(p,q)) 也是 (x) 的周期。

引理 3

(x) 为非空字符串,以下两个是等效的。

(i) (x) 不是好的字符串

(ii) (|x|/per(x))(2) 或更大的整数。

首先,如果 (ii) 成立,那么 (i) 肯定成立,所以在下文中 (i) 就是 (ii) 。

如果 (x) 不是一个好的字符串,(|x|/per(x)ge 2) 从定义来说显而易见。接下来我们只需要证明 (|x|/per(x)) 是一个整数,(x) 不是一个好的字符串意味着存在一个字符串 (y) 和一个整数 (kge 2),使得 (x)(y) 重复 (k) 次后获得的字符串。令 (p=per(x),q=|y|),则 (ple q=|x|/kle |x|/2),由于 (p,q) 都是 (x) 的周期,且满足 (p+q-gcd(p,q)le |x|),由定理 (2) 知,(gcd(p,q))(x) 的周期,假设 (|x|/per(x)) 不是整数,则 (q) 不是 (p) 的倍数,此时 (gcd(p,q)<p),这与 (p=per(x))(x) 的最小周期相悖,因此 (|x|/per(x)) 是一个整数。

引理 4

(x) 为长度为 (2) 或更大的字符串。令 (m=|x|)。此外,令 (y=x [1...m ? 1])。如果 (x) 不是一个好的字符串,并且 (per(x) ot=1),则 (y) 是一个好的字符串。

假设 (y) 不是一个好的字符串。令 (p=per(x),q=per(y))。根据引理 (3) 和之前的假设,(p)(m) 的约数,(q)(|y|=m-1) 的约数。因为 (m)(m-1) 互质,因此 (p)(q) 也互质,即 (gcd(p,q)=1),此外,(ple m/2,qle(m-1)/2),其中 (p) 也是 (y) 的周期,因此,根据定理 (2)(gcd(p,q)=1)(y) 的周期,因此从 (x[0]=x[p]) 开始,(x) 的最后 (m-1) 个字符全部变为与 (x[0]) 相同的字符,此时 (per(x)=1),这与前提矛盾,故 (y) 是一个好的字符串。

定理 5

对于一个字符串 (w),假设 (w) 不是一个好的字符串,并且 (per(w) ot=1)。 此时,(w)的最佳表达为 (2)

长度为 (1) 的字符串显然是一个好的字符串。 此外,根据引理 (4)(w[1...|w|?1]) 是一个好的字符串,因此序列((w [0],w[1...|w|-1]))(w) 是最佳表达之一。 显然,(w) 没有1或更小的最佳表达。则 (w) 的最佳表达为2。

以上是关于Atcoder Regular Contest 060 F题第一问答案证明的主要内容,如果未能解决你的问题,请参考以下文章

AtCoder Regular Contest 101

[Atcoder Regular Contest 060] Tutorial

AtCoder Regular Contest 101

AtCoder Regular Contest E - Or Plus Max

AtCoder Regular Contest 146 C Even XOR题解

AtCoder Regular Contest 146 C Even XOR题解