一切的开始

令 \(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. k8s--yml文件

  2. vsftp 常见配置测试与故障排除

    匿名用户 /var/ftp        本地用户 /home/username配置vsftpd时,强烈建议·# cp /etc/vsftpd.conf /etc/vsftpd.conf1       ...

  3. 大数据集群环境搭建之一 Centos基本环境准备

    首先需要准备的软件都有:Centos系统.SecureCRT 8.5.VMware Workstation Pro.jdk-8u172-linux-x64.tar.gz基本上这个软件就是今天的战场. ...

  4. MYSQL慢查询优化方法及优化原则

    1.日期大小的比较,传到xml中的日期格式要符合'yyyy-MM-dd',这样才能走索引,如:'yyyy'改为'yyyy-MM-dd','yyyy-MM'改为'yyyy-MM-dd'[这样MYSQL会 ...

  5. Pthon魔术方法(Magic Methods)-容器相关方法

    Pthon魔术方法(Magic Methods)-容器相关方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.容器相关方法汇总 __len__: 内建函数len(),返回对象的 ...

  6. 列车网络智能诊断工具链—MVB智能诊断仪

    由于MVB网络采用分布式网络结构,各组网设备分布在不同电气柜,甚至是在不同车辆上,各组网设备往往来自于不同供应商,这给MVB网络调试及诊断带来了很大的难度.目前MVB网络调试及故障排查,主要是通过仪器 ...

  7. python笔记39-unittest框架如何将上个接口的返回结果给下个接口适用(面试必问)

    前言 面试必问:如何将上个接口的返回结果,作为下个接口的请求入参?使用unittest框架写用例时,如何将用例a的结果,给用例b使用. unittest框架的每个用例都是独立的,测试数据共享的话,需设 ...

  8. P1941 飞扬的小鸟[dp]

    题目描述 Flappy Bird是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便宣 ...

  9. pipy配置镜像源

    新电脑第一次使用使用pip命令下载贼慢 我们需要使用国内pipy镜像,参考如下 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ 所以只要设置一下就行了: ...

  10. SQL异常总结

    1.resultType和resultMap写错时,启动时就会报错 原因: 2.The error occurred while handling results ### SQL: select US ...