zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    ajax 前台返回后台传递过来的数组
    js中push的用法
    split 的用法
    ckeditor上传图片
    FTP安装配置
    批量删除.svn文件
    Ext flex属性
    Extjs3 主题样式
    Ext.apply与Ext.applyIf
    SharePoint2010 Office Web Apps
  • 原文地址:https://www.cnblogs.com/mleautomaton/p/11609512.html
Copyright © 2011-2022 走看看