题目描述

PDF

输入输出格式

输入格式:

输出格式:

输入输出样例

输入样例#1:
复制

abcd
aaaa
ababab
.
输出样例#1: 复制

1
4
3

题解

Luogu的题解

这里是对目前最高赞题解结论的证明。

结论:设字符串长度为$n$,最长相同前后缀的长度为$next[i]$,

如$n$%$(n-next[n])=0$,则答案为$n/(n-next[n])$,否则为$1$。

证明:

我们求$next$数组的时候,相当于每次把当前串这样对齐了一下↓

而$next$求到$n$时,上面串的$n$对应的就是下面串的$next[n]$。

这时候的$n-nxt[n]$就是箭头指向的绿色部分。

而上下两串其实是一样的,所以下面串的前$n-nxt[n]$格和上面串的前$n-nxt[n]$相同。

又因为两串由蓝色框住的部分匹配,所以下面的绿框对应的部分和绿框相同。

依此递推,可以得到,**如果循环节多于一个**,以前$n-nxt[n]$个为循环节,是可以铺满整串的。而且因为$nxt[n]$是尽量大的,所以这样得到的循环节长度为所有可能情况中最小的,也就是我们所求的。

而如果$n$%$(n-next[n])≠0$,可以认为之前的循环节匹配仍然可以进行,但是最后一个循环节被强行割掉了一些。

显然这样就怎么都安排不上了。

所以如$n$%$(n-next[n])=0$,就能排上,答案为$n/(n-next[n])$,否则只能以自己为循环节,答案为$1$。

代码实现的时候注意一下自己代码中$n$的定义和$nxt$数组的定义什么的。

还是放一下我的代码叭qwq

 /*
qwerta
UVA10298 Power Strings
Accepted
代码 C++,0.65KB
提交时间 2018-10-12 17:59:53
耗时/内存
100ms, 0KB
*/
#include<iostream>
#include<cstdio>
using namespace std;
int nxt[];
int main()
{
//freopen("a.in","r",stdin);
while()
{
string s;
getline(cin,s);//读入一整行,放进s
if(s.length()==&&s[]=='.')break;
int lens=s.length();
//kmp求next
int k=-;
nxt[]=-;
for(register int i=;i<lens;++i)
{
while(k!=-&&s[i]!=s[k+])k=nxt[k];
if(s[i]==s[k+])k++;
nxt[i]=k;
}
int n=lens-;
if((n+)%(n-nxt[n])==)//如果能恰好排满循环节
printf("%d\n",((n+)/(n-nxt[n])));//输出总长除以循环节长度
else printf("1\n");//否则输出1
}
return ;
}

吐槽:拿来做模拟题压轴被吐槽是结论题......

明明前两天才讲过啊!(摔

最新文章

  1. 如何写 JS 的链式调用 ---》JS 设计模式《----方法的链式调用
  2. NLP--十项沟通前的思想准备
  3. jetty9 安装部署更改端口号
  4. 监控web服务方法
  5. [翻译]使用Swift在Xcode中创建自定义控件
  6. &lt;?php $sql = &lt;&lt;&lt;EOF 。。。。EOF;?&gt;这种写法是什么意思
  7. gitlab ActionView::Template::Error (undefined method `[]&#39; for nil:NilClass): 500错误
  8. C++中虚函数实现原理揭秘
  9. java静态内部类理解
  10. Quartz学习——Quartz简单入门Demo(二)
  11. LInux命令英文全称
  12. 【Java并发.6】结构化并发应用程序
  13. BZOJ4653 [NOI2016] 区间 【线段树】
  14. day33 网络编程之线程,并发以及selectors模块io多路复用
  15. BZOJ5177 : [Jsoi2013]贪心的导游
  16. python的Web框架,Django模型系统二,模型属性,及数据库进阶查询
  17. 10种JavaScript开发者必备的VS Code插件
  18. JDK7+EclipseIDE+Tomcat7.0.55++mybatis3+Maven3.2.2 构建webapp 的java 的maven项目
  19. Git - 必知必会
  20. Android开发艺术探索学习笔记(一)

热门文章

  1. Unable to connect to the MKS : Failed to connect to server XXXXXX:903
  2. VirtualApp技术黑产利用研究报告
  3. Lazarus安装使用
  4. Eclipse出现&amp;quot;Running Android Lint has encountered a problem&amp;quot;解决方式
  5. 自己定义一个Dialog样式的Activity窗体,切换到Dialog的方法
  6. C++静态库与动态库深入研究
  7. GOOGLE VR SDK开发VR游戏,VR播放器之中的一个
  8. Cocos2d-x 3.0final 终结者系列教程15-win7+vs2012+adt+ndk环境搭建(无Cygwin)
  9. 前端自动化工具 gulp
  10. jni集成第3方third party动态库libwebrtc_audio_preprocessing.so时android.mk的编写