一切的开始

令 \(x\) 为字符串,\(p\) 为正整数。如果对于满足 \(0\le 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

由 \(\text{KMP}\) 或者 \(\text{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\) 和一个整数 \(k\ge 2\),使得 \(x\) 是 \(y\) 重复 \(k\) 次后获得的字符串。令 \(p=per(x),q=|y|\),则 \(p\le q=|x|/k\le |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)\not=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\),此外,\(p\le m/2,q\le(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)\not=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题第一问答案证明的更多相关文章

  1. AtCoder Regular Contest 069 F Flags 二分,2-sat,线段树优化建图

    AtCoder Regular Contest 069 F Flags 二分,2-sat,线段树优化建图 链接 AtCoder 大意 在数轴上放上n个点,点i可能的位置有\(x_i\)或者\(y_i\ ...

  2. AtCoder Beginner Contest 215 F题题解

    F - Dist Max 2 什么时候我才能突破\(F\)题的大关... 算了,不说了,看题. 简化题意:给定\(n\)个点的坐标,定义没两个点的距离为\(min(|x_i-x_j|,|y_i-y_j ...

  3. AtCoder Regular Contest 074 F - Lotus Leaves

    题目传送门:https://arc074.contest.atcoder.jp/tasks/arc074_d 题目大意: 给定一个\(H×W\)的网格图,o是可以踩踏的点,.是不可踩踏的点. 现有一人 ...

  4. AtCoder Regular Contest 081 F - Flip and Rectangles

    题目传送门:https://arc081.contest.atcoder.jp/tasks/arc081_d 题目大意: 给定一个\(n×m\)的棋盘,棋盘上有一些黑点和白点,每次你可以选择一行或一列 ...

  5. [Atcoder Regular Contest 060] Tutorial

    Link: ARC060 传送门 C: 由于难以维护和更新平均数的值: $Average->Sum/Num$ 这样我们只要用$dp[i][j][sum]$维护前$i$个数中取$j$个,且和为$s ...

  6. 【AtCoder Regular Contest 082 F】Sandglass

    [链接]点击打开链接 [题意] 你有一个沙漏. 沙漏里面总共有X单位的沙子. 沙漏分A,B上下两个部分. 沙漏从上半部分漏沙子到下半部分. 每个时间单位漏1单位的沙子. 一开始A部分在上面.然后在r1 ...

  7. 【arc077f】AtCoder Regular Contest 077 F - SS

    题意 给你一个形如"SS"的串S,以及一个函数\(f(x)\),\(x\)是一个形如"SS"的字符串,\(f(x)\)也是一个形如"SS"的 ...

  8. AtCoder Beginner Contest 213 F题 题解

    F - Common Prefixes 该题也是囤了好久的题目了,看题目公共前缀,再扫一眼题目,嗯求每个后缀与其他后缀的公共前缀的和,那不就是后缀数组吗?对于这类问题后缀数组可是相当在行的. 我们用后 ...

  9. AtCoder Regular Contest 076 F - Exhausted?

    题意: n个人抢m个凳子,第i个人做的位置必须小于li或大于ri,问最少几个人坐不上. 这是一个二分图最大匹配的问题,hall定理可以用来求二分图最大匹配. 关于hall定理及证明,栋爷博客里有:ht ...

随机推荐

  1. SpringBoot中Logback日志的配置

    说明 在SpringBoot中自带的日志工具是Logback,我们可以在Springboot的配置文件中直接对Logback进行一些简单的配置,如: logging.level.com.nowcode ...

  2. Spring Security 解析(一) —— 授权过程

    Spring Security 解析(一) -- 授权过程   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security .S ...

  3. 三星手机使用应用沙盒一键修改路由mac数据

    之前文章介绍了怎么在安卓手机上安装激活xposed框架,xposed框架的极强的功能大家都知道,能够不修改apk的前提下,修改系统底层的参数,打比方在某些应用情景,大家需要修改手机的某个系统参数,这情 ...

  4. VLC架构及流程分析

    0x00 前置信息 VLC是一个非常庞大的工程,我从它的架构及流程入手进行分析,涉及到一些很细的概念先搁置一边,日后详细分析. 0x01 源码结构(Android Java相关的暂未分析) # bui ...

  5. Windows下MongoDB的下载安装、环境配置

    下载MongoDB 1.进入MongoDB官网,Products -> 选择SOFTWARE下的MongoDB Server 2.选择下载最新版 3.选择对应的版本下载 msi安装包形式安装Mo ...

  6. (摘录笔记)JAVA学习笔记SSH整合搭建项目

    1:当然是导jar包啦: struts2: spring: hibernate: 至于这些jar包是什么作用,我想就不必我解释了,大家都懂得,ssh2基本的jar包: 还有一些其他jar包:strut ...

  7. 【RAC】 RAC For W2K8R2 安装--dbca创建数据库(七)

    [RAC] RAC For W2K8R2 安装--dbca创建数据库(七) 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可 ...

  8. 动态渲染左侧菜单栏 :menu tree 动态渲染

    其中后端代码不包含权限控制,同时支持二级(无子菜单) 和 三级菜单(无子菜单). 1.layui前端代码:(其他前端框架实现方法通用,不过需要修改js中append对应标签元素即可) <div ...

  9. app开发-3

    一.Audio 模块实现开启手机摄像头 基于html5 plus http://www.html5plus.org/doc/zh_cn/audio.html 栗子:   自定义: scanQR.HTM ...

  10. 字节序 —— Big Endian 和 Little Endian

    一.字节序 字节序指的是多字节的数据在内存中的存放顺序 内存有高地址端与低地址端.其中,低地址端既可以存放高位字节,也可以存放低位字节. Big Endian 是指低地址端 存放 高位字节. Litt ...