题义是求给定的一个串在任意字符时,那么这么一个前缀能否被表示为该前缀的子串通过至少两次循环得到。样例中的  "aaa" 表示在第二号位置可以通过循环两次得到,循环节当然是 "a" 了,而在三号位置可以通过循环三次得到,循环节当然还是 "a" 了。

  上一道题目(HDU 3736)我们已经找到了循环节的公式,所以这里直接在每一位直接判断是否为一个合法的循环结构即可。

  代码如下:

#include <iostream>
#include <cstring>
using namespace std;char str[1000005];  /**/   int next[1000005];void getnext( char *s, int *next )
{int k= 1, j= 0, len= strlen( str+ 1 );while( k<= len ){if( j== 0|| s[j]== s[k] ){++j, ++k;next[k]= j;}else{j= next[j];}}
}int main(  )
{int N, cnt= 0;while( cin>> N, N!= 0 ){cin>> str+ 1;int len= strlen( str+ 1 );getnext( str, next );cout<< "Test case #"<< ++cnt<< endl;for( int i= 2; i<= len; ++i ){int loop= i- next[i+ 1]+ 1;if( i% loop== 0&& i/ loop> 1 )  //后面的判断不能少{  // 必须有一个以上的循环cout<< i<< " "<< i/ loop<< endl;}}cout<< "\n";}return 0;
}

转载于:https://www.cnblogs.com/Lyush/archive/2011/07/28/2119168.html

HDU-1358 Period KMP相关推荐

  1. HDU - 1358 Period(KMP的next数组求最小循环节)

    题目链接:点击查看 题目大意:给出一个长度为n的字符串,问有哪些前缀是周期性字符串 题目分析:因为n给的很大,所以肯定不能暴力判断了,我们可以巧妙的利用kmp的next数组进行判断,next数组有一个 ...

  2. HDU 1358 Period KMP

    题意:求一个字符串的所有前缀是否是复制出来的. 解题思路:next 数值判断即可 解题代码: 1 // File Name: getnext.cpp 2 // Author: darkdream 3 ...

  3. hdu 1358 Period (KMP求循环次数)

    Problem - 1358 KMP求循环节次数.题意是,给出一个长度为n的字符串,要求求出循环节数大于1的所有前缀.可以直接用KMP的方法判断是否有完整的k个循环节,同时计算出当前前缀的循环节的个数 ...

  4. hdu 1358 Period

    枚举长度判断是否符合周期串,用next判断 #include<cstring> #include<cstdio> using namespace std; #define MA ...

  5. hdu 4125 Moles(kmp+树状数组)

    题目链接:hdu 4125 Moles 题意: 给你n个数,让你按键值建一个平衡二叉树,然后奇数为0,偶数为1,然后可以遍历这颗树得到一个欧拉序列,现在给你一个串,问你出现了几次. 题解: 建树的时候 ...

  6. HDU - Number Sequence(KMP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Time Limit: 10000/5000 MS (Java/Others) Memory L ...

  7. HDU 1618 Oulipo KMP解决问题的方法

    鉴于两个字符串,寻找一个字符串的频率,另一个字符串出现. 原版的kmp另一个陷阱.以下凝视了,标不是踩着好,有加班一定几率,也有机会错误,根据不同的字符串可以是详细. 变化看起来像一个,kmp速度是非 ...

  8. HDU - 1686 Oulipo KMP

    Oulipo Problem Description The French author Georges Perec (1936–1982) once wrote a book, La dispari ...

  9. HDU - Cyclic Nacklace(KMP)

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

最新文章

  1. linux set include path,set_include_path()的用法
  2. 【Java 网络编程】TCP 简介
  3. XidianOJ 1037 倍流畅序列
  4. RxJs combineLatest Operator 的数组用法
  5. python range函数范围_Python range函数
  6. sql server常用函数、常用语句
  7. 书本练习题7print函数使用
  8. ann2snn的代码分析
  9. 5.7 Universal Transformers
  10. ffmpeg-20160629-git-bin.7z
  11. VBA EXCEL 常用代码
  12. Meet Apache Wicket
  13. 如何查看自己的appid以及在微信开发者工具中查看APPID
  14. mybatis中只查询部分字段的处理方式
  15. python-华三防火墙过期策略统计
  16. 防抖(Debouncing)和节流(Throttling)
  17. 浅谈String的堆内存和栈内存
  18. 数据科学导论实验:基于Twitter的网络结构和社会群体演化
  19. [教程]HP Envy J/K/Q/N系列Haswell平台 Clover引导安装黑苹果
  20. 【系统集成项目管理工程师】—关键路径

热门文章

  1. 苹果发布新应用Find My Friends,轻松追踪朋友和家人的所在位置
  2. 我恨Safari!!!
  3. Hotmail怎么进不去?!
  4. 全手工制作arm-linux交叉编译工具链《一》-转
  5. 蓝桥杯 BASIC-29 基础练习 高精度加法
  6. python数值运算操作符也叫做内置操作符_Python的操作符 - osc_r1gtal48的个人空间 - OSCHINA - 中文开源技术交流社区...
  7. java 用户、角色、权限数据库设计
  8. 《软件需求》学习笔记
  9. Android开发系列(十七):读取assets文件夹下的数据库文件
  10. AC日记——独木桥 洛谷 p1007