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】

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<algorithm>
  5. #include<string>
  6. #include<cstring>
  7. using namespace std;
  8. int n;
  9. const int maxn=1e5+;
  10. const int inf=0x3f3f3f3f;
  11. char str[maxn];
  12. int nxt[maxn];
  13. typedef long long ll;
  14. void kmp_pre(int m)
  15. {
  16. int i,j;
  17. j=nxt[]=-;
  18. i=;
  19. while(i<m)
  20. {
  21. while(i<m)
  22. {
  23. while(j!=-&&str[i]!=str[j])
  24. {
  25. j=nxt[j];
  26. }
  27. nxt[++i]=++j;
  28. }
  29. }
  30. }
  31. int main()
  32. {
  33. int T;
  34. scanf("%d",&T);
  35. while(T--)
  36. {
  37. memset(nxt,,sizeof(nxt));
  38. scanf("%s",str);
  39. int len=strlen(str);
  40. kmp_pre(len);
  41. //cout<<nxt[len]<<endl;
  42. int ans=len-nxt[len];
  43. if(ans!=len&&len%ans==)
  44. {
  45. printf("0\n");
  46. }
  47. else
  48. {
  49. printf("%d\n",ans-(len-(len/ans)*ans));
  50. }
  51. }
  52. return ;
  53. }

【KMP+最小循环节】F. Cyclic Nacklace的更多相关文章

  1. HDU3746 Cyclic Nacklace —— KMP 最小循环节

    题目链接:https://vjudge.net/problem/HDU-3746 Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others)    M ...

  2. hdu 3746 Cyclic Nacklace(kmp最小循环节)

    Problem Description CC always becomes very depressed at the end of this month, he has checked his cr ...

  3. Cyclic Nacklace hdu3746 kmp 最小循环节

    题意:给出一段字符串  求最少在最右边补上多少个字符使得形成循环串(单个字符不是循环串) 自己乱搞居然搞出来了... 想法是:  如果nex[len]为0  那么答案显然是补len 否则  答案为循环 ...

  4. Common Divisors CodeForces - 182D || kmp最小循环节

    Common Divisors CodeForces - 182D 思路:用kmp求next数组的方法求出两个字符串的最小循环节长度(http://blog.csdn.net/acraz/articl ...

  5. UVAlive 3026 KMP 最小循环节

    KMP算法: 一:next数组:next[i]就是前面长度为i的字符串前缀和后缀相等的最大长度,也即索引为i的字符失配时的前缀函数. 二:KMP模板 /* pku3461(Oulipo), hdu17 ...

  6. Codeforces Round #117 (Div. 2) D.Common Divisors(KMP最小循环节)

    http://codeforces.com/problemset/problem/182/D 题意:如果把字符串a重复m次可以得到字符串b,那么我们称字符串a为字符串b的一个因子,现在给定两个字符串S ...

  7. HDU1358 Period —— KMP 最小循环节

    题目链接:https://vjudge.net/problem/HDU-1358 Period Time Limit: 2000/1000 MS (Java/Others)    Memory Lim ...

  8. HDU - 4333 Revolving Digits(拓展kmp+最小循环节)

    1.给一个数字字符串s,可以把它的最后一个字符放到最前面变为另一个数字,直到又变为原来的s.求这个过程中比原来的数字小的.相等的.大的数字各有多少. 例如:字符串123,变换过程:123 -> ...

  9. [poj 2185] Milking Grid 解题报告(KMP+最小循环节)

    题目链接:http://poj.org/problem?id=2185 题目: Description Every morning when they are milked, the Farmer J ...

随机推荐

  1. python_数据类型基本操作(2)

    概览: 第1章 基础数据类型宏观的初识第2章 int 第3章 bool 第4章 str 4.1 python体现形式 4.2 引号用法 4.3 字符串运算 4.3.1 字符串相加 4.3.2 字符串相 ...

  2. C# 控制台语音计算器

    记得上高中时,给人当会计,帮忙结算月度工资:用的就是带语音功能的计算器! 当时用起来倍儿爽,于是速度加倍,效率加速:结果让老板赔了不少钱! 就是因为这个,才对语音计算器有了深刻印象!可能是这货坑了我! ...

  3. .NET框架概述

    .NET战略目标: 任何时候(when),任何地方(where),使用任何工具(what)都能通过.NET的服务获得网络上的任何信息. .NET优势: 1.提供了一个面向对象的编程环境,完全支持面向对 ...

  4. 2017团体程序设计天梯赛大区赛 L3-3 球队“食物链”

    思路: 状压dp. 实现: #include <iostream> #include <cstdio> #include <cstring> using names ...

  5. iOS Programming Touch Events and UIResponder

    iOS Programming Touch Events and UIResponder  1 Touch Events  As a subclass of UIResponder, a UIView ...

  6. 使用Jenkins进行android项目的自动构建(3)

    建立Jenkins项目 1. “新增作业”->填写作业名称->选择“建置 Maven 2 或 3 專案”->OK.新增成功后会进入“組態設定”,暂时先保留默认值,稍后再进行设定. 2 ...

  7. Python界面编程之六----布局

    布局(转载于–学点编程吧)通过实践可知采用了布局之后能够让我们的程序在使用上更加美观,不会随着窗体的大小发生改变而改变,符合我们的使用习惯. 绝对位置程序员以像素为单位指定每个小部件的位置和大小. 当 ...

  8. opencv实现人脸,人眼,微笑检测

    1.首先实现人脸检测 import cv2 img = cv2.imread("people.jpg",1) #读入图像 #导入人脸级联分类器引擎,“.xml”文件里包含了训练出来 ...

  9. image和TFRecord互相转换

    关说不练假把式.手上正好有车牌字符的数据集,想把他们写成TFRecord格式,然后读进来,构建一个简单的cnn训练看看.然后发现准确率只有0.0x.随机猜也比这要好点吧.只能一步步检查整个过程.暂时想 ...

  10. COPY - 在表和文件之间拷贝数据

    SYNOPSIS COPY tablename [ ( column [, ...] ) ] FROM { 'filename' | STDIN } [ [ WITH ] [ BINARY ] [ O ...