Cyclic Nacklace

题意:给一个长度为Len( 3 <= Len <= 100000 )的英文串,问你在字符串后面最少添加几个字符可以使得添加后的串为周期串?

Sample Input
3
aaa
abca
abcde
 
Sample Output
0
2
5
 
思路:要是写过period再来写这道题会发现很简单;就是在getfail()得到f[]之后,贪心地看最后一个字符所能用到的最长后缀长度为多少?而这个后缀长度就是n - n%len;(n为字符串长度,len为循环节的长度)。当然事先要看是否本身就是一个循环串;时间复杂度O(n)
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. const int N = 1e5 + ;
  6. char p[N];
  7. int f[N];
  8. void getfail(char *p,int *f)
  9. {
  10. f[] = f[] = ;
  11. int n = strlen(p);
  12. for(int i = ;i < n;i++){
  13. int j = f[i];
  14. if(j && p[i] != p[j]) j = f[j];
  15. f[i+] = (p[i] == p[j] ?j+:);// i+1会递推到第n位
  16. }
  17. }
  18. int main()
  19. {
  20. int T;
  21. scanf("%d",&T);
  22. while(T--){
  23. scanf("%s", p);
  24. getfail(p,f);
  25. int n = strlen(p),len = n - f[n];
  26. if(f[n] && n%len == ) puts("");//本身就是周期串
  27. else{
  28. printf("%d\n",len-n%len);
  29. }
  30. }
  31. }

hdu 3746 Cyclic Nacklace KMP循环节的更多相关文章

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

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

  2. HDU 3746 Cyclic Nacklace (KMP找循环节)

    题目链接:HDU 3746 Sample Input 3 aaa abca abcde Sample Output 0 2 5 Author possessor WC Source HDU 3rd & ...

  3. hdu 3746 Cyclic Nacklace (KMP求最小循环节)

    //len-next[len]为最小循环节的长度 # include <stdio.h> # include <algorithm> # include <string. ...

  4. HDU 3746 Cyclic Nacklace(kmp next数组运用)

    Cyclic Nacklace Problem Description CC always becomes very depressed at the end of this month, he ha ...

  5. HDU 3746 Cyclic Nacklace (KMP求循环节问题)

    <题目链接> 题目大意: 给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数. [>>>kmp next函数 kmp的周期问题]  #include &l ...

  6. HDU 3746 Cyclic Nacklace KMP

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3746 KMP算法—— AC代码: #include <iostream> #include ...

  7. HDU 3746 - Cyclic Nacklace & HDU 1358 - Period - [KMP求最小循环节]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...

  8. HDU 3746 Cyclic Nacklace (用kmp求循环节)

    Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  9. HDU 3746 Cyclic Nacklace(KMP找循环节)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 题目大意:给你一个字符串,求出将字符串的最少出现两次循环节需要添加的字符数. 解题思路: 这题需 ...

随机推荐

  1. PAT 1011

    1011. World Cup Betting (20) With the 2010 FIFA World Cup running, football fans the world over were ...

  2. 写JQuery插件的基本知识

    普及JQuery知识 知识1:用JQuery写插件时,最核心的方法有如下两个: 复制代码 代码如下: $.extend(object) 可以理解为JQuery 添加一个静态方法. $.fn.exten ...

  3. Templates

    Templates Templates are the site's markup, where images and js, css files are located as well as the ...

  4. Asp.Net 之 汉字转拼音

    1.利用微软提供的拼音库,计算出汉字的拼音的方法,此方法支持多音字符 下载 Visual Studio International Pack类库,该类库扩展了.NET Framework对全球化软件开 ...

  5. 210 - Concurrency Simulator(WF1991, deque, 模拟)

    题目有点长,理解题花了不少时间 粘下别人的翻译~ 你的任务是模拟n个程序(按输入顺序编号为1~n)的并行执行.每个程序包含不超过25条语句,格式一共有5种: var=constant(赋值): pri ...

  6. 如何解决linux(ubuntu/CENTOS)中gedit中文乱码的问题

    http://jingyan.baidu.com/article/1709ad80a443c54634c4f09c.html 同时按键盘的Alt 和 F2,就可以打开“运行程序”对话框,这个功能类似于 ...

  7. [记录]gulp compass

    因为个人习惯用compass,所以gulp中,还是用compass进行编译scss文件. 1. 使用npm安装gulp-compass npm install gulp-compass --save- ...

  8. hadoop mapreduce 优化

    http://www.cnblogs.com/c840136/archive/2013/03/10/2952887.html http://irwenqiang.iteye.com/blog/1535 ...

  9. 高级C#

    使用delegates委托写插件方法: public delegate int Transformer (int x); public class Util { public static void ...

  10. 转--T-SQL 总结

    把长日期转换为短日期   Convert(char(10),getdate(),120)  MS-SQL数据库开发常用汇总 1.按姓氏笔画排序:Select * From TableName Orde ...