https://www.bnuoj.com/v3/contest_show.php?cid=9147#problem/F

【题意】

给定一个字符串,问在字符串后最少添加多少个字母,得到的新字符串能是前缀循环的字符串。

【思路】

这道题的关键是要理解KMP中的nxt数组什么含义。

nxt[i]就是以i结尾的字符串中前缀和后缀匹配的最长长度。

所以len-nxt[len]就是最小循环节。

如abcdab,nxt[len]就是2,最小循环节就是4(abcd)。

理解了这个这道题就迎刃而解了。

【网上解释】

http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html

【Accepted】

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
int n;
const int maxn=1e5+;
const int inf=0x3f3f3f3f;
char str[maxn];
int nxt[maxn];
typedef long long ll;
void kmp_pre(int m)
{
int i,j;
j=nxt[]=-;
i=;
while(i<m)
{
while(i<m)
{
while(j!=-&&str[i]!=str[j])
{
j=nxt[j];
}
nxt[++i]=++j;
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(nxt,,sizeof(nxt));
scanf("%s",str);
int len=strlen(str);
kmp_pre(len);
//cout<<nxt[len]<<endl;
int ans=len-nxt[len];
if(ans!=len&&len%ans==)
{
printf("0\n");
}
else
{
printf("%d\n",ans-(len-(len/ans)*ans));
}
}
return ;
}

最新文章

  1. percona server 二进制安装下编译tpcc-mysql的坑
  2. Bootstrap系列 -- 7. 列表排版方式
  3. 8天掌握EF的Code First开发系列之2 简单的CRUD操作
  4. jquery学习笔记1
  5. 10个优质PSD文件资源下载
  6. 关于memory 和 cache
  7. Ci 分页类的所有属性总结
  8. Win7 IE11无法打开的可能解决办法
  9. react 实用的性能优化方式
  10. Python 计算当真因子个数为偶数个时为幸运数,计算区间内幸运数之和
  11. 百度EasyDL文本分类自定义API示例代码 python
  12. Android--UI之Gallery
  13. maven 插件2
  14. JQuery效率问题
  15. Winsock版本的“hello world!”
  16. Atcoder681 Typical DP Contest E.数 数位dp
  17. Cesium随笔(3)随鼠标实时显示经纬度坐标以及高度【转】
  18. tensorflow中共享变量 tf.get_variable 和命名空间 tf.variable_scope
  19. sdc-docker
  20. python基础——操作系统简介

热门文章

  1. Ubuntu Server 上安装pip后pip命令报错的解决办法
  2. 动态规划:最大连续子序列乘积 分类: c/c++ 算法 2014-09-30 17:03 656人阅读 评论(0) 收藏
  3. Oracle代码 规则 创建表 表空间 用户等
  4. Atcoder B - Boxes 玄学 + 数学
  5. P1583 魔法照片
  6. 重构28-Rename boolean method(重命名布尔方法)
  7. iOS - 事件处理全过程(补充)
  8. SQL——视图、事务、锁、存储过程
  9. CSS中的趣事之float浮动
  10. Swift protocol extension method is called instead of method implemented in subclass