fzu 1901 Period II

点击打开链接fzu 1901

思路:kmp+next数组的应用
分析:
1 题目要求的找到所有满足S[i]=S[i+P] for i in [0..SIZE(S)-p-1]的前缀,并且长度为p。利用上面的式子可以等价的得到等式s[0,len-p-1] = s[p , len-1].
2 给个next数组的性质
   假设现在有一个字符串为ababxxxxabab。那么求出的next数组为00012001234,那么前缀和后缀最长的匹配数是4,然后下一个前缀和后缀匹配长度为next[4] = 2 , 然后下一个为next[2] = 0。
   所以有一个结论就是,假设当前求出的字符串的前缀和后缀的最长的匹配的长度为len,那么下一个满足的前缀和后缀互相匹配的长度为next[len]...依次
3 观察一下上面的等式,我们发现并不是我们所熟悉的前缀和后缀匹配的等价式。那么我们现在来看这个样列
            f z u f z u f z u f   长度为10
next    000 01 2 3 456 7
那么根据next数组就得到前缀和后缀的匹配长度依次为 7 4 1 0 ,那么这时候看看题目的p的可能长度为 3 6 9 10,那么有没有发现规律。

代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;

#define MAXN 1000010

int Case;
int next[MAXN];
char words[MAXN];

void getNext(){
   int len = strlen(words);
   next[0] = next[1] = 0;

   for(int i = 1 ; i < len ; i++){
      int j = next[i];
      while(j && words[i] != words[j])
          j = next[j];
      next[i+1] = words[i] == words[j] ? j+1 : 0;
   }
}

int main(){
   int t = 1;
   scanf("%d" , &Case);
   while(Case--){
      scanf("%s" , words);
      getNext();
      int len = strlen(words);
      int i = next[len];
      int ans = 1;
      while(i){
         ans++;
         i = next[i];
      }
      printf("Case #%d: %d\n" , t++ , ans);
      i = next[len];
      while(i){
         printf("%d " , len-i);
         i = next[i];
      }
      printf("%d\n" , len);
   }
   return 0;
}
时间: 2024-10-28 17:15:26

fzu 1901 Period II的相关文章

KMP专题【完结】

第一题 hdu 1711 Number Sequence 点击打开hdu 1711 思路: 1 kmp是用来匹配字符串,只能够匹配单一的字符串 2 kmp的算法的过程:   1:假设文本串的长度为n,模式串的长度为m:   2:先例用O(m)的时间去预处理next数组,next数组的意思指的是当前的字符串匹配失败后要转到的下一个状态:   3:利用o(n)的时间去完成匹配: 3 时间复杂度为o(n+m)即o(n): 点击查看代码 第二题 hdu 1686 oulipo 点击打开hdu 1686

绘影II与Photoshop焕彩黑白照片

鼠标的出现,大大的改进了电脑的操作方式,但发展至今天,因为时代的进步,它的能力始终有限.作为一个艺术创作者.平面或动画的设计师,如果只使用一个鼠标作绘图,可谓是一件痛苦的事情,即使拥有精湛的鼠标操作技巧,精准的点击能力,也比不上用笔在画板上挥毫那么直观!所以,拥有一个功能强大和灵活多变的创意软件和工具可以使你的设计工作事半功倍,Adobe Photoshop CS和UGEE绘影II代绘图板就是这样一对创意绝配,它具备1024级的压感和200点/秒的绘画识别功能,能帮助你自由地发挥创意空间.在UG

学习网页制作:像table一样布局div II

网页 像table一样布局div Ⅰ 下面是我翻译的内容,是根据我对文章的理解意译的,你就别挑哪里翻译的不对了,我的目的只是传达这个CSS技巧 上一篇的问题就是,这个模型对IE来说等同于垃圾,所以基本只能是做来玩玩而已,没有什么实际的用处,现在我要做的就是,让它也能在IE下更好的显示,所以我又做了第二个模型 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/

测试Trackback II

修改上一篇文章后,在修改时添加的链接似乎并没有被.Text分析和自动尝试Trackback.另个,我两个朋友的Blog没有被Ping到,可能是Trackback URL不同于BLOG URL的缘故.再尝试一次: Ryana,再试你的Spider-Man II. 其他人也在测试Trackback.

设计数据仓库的注意事项(Part II)

设计|数据 End Users The end users are who you are designing and building the data warehouse for ?your customers. They rely on the information they extract from the warehouse in order to work more effectively and efficiently. They also ultimately determin

JSP 构架-2种方式:Model I和Model II

js|model 作者:Lance Lavandowska 编译:blueski 如果你经常去Servlet或JSP的新闻组或者邮件列表,那么一定会看到不少关于Model I 和Model II 方法的讨论.究竟采用哪一种,这取决于你的个人喜好.团队工作策略以及是否采用正统的OOP. 简单地说,Model I将事务逻辑(business logic)和表示代码(presentation code)融合在一起(如在HTML中):Model II则提倡最大限度地将所有的代码放到内容表示之外. Mod

2Gb or Not 2Gb - File limits in Oracle (Part II)

oracle 2Gb or Not 2Gb - File limits in Oracle (Part II)   导出(Export)和2Gb   2Gb导出文件的大小 当编写大部分版本的Export时,在创建导出文件上都是使用了默认的文件操作API.这就意味着在很多平台上根本就没有可能导出2Gb或者大于2Gb的文件系统文件(file system file). 但是仍然有一些可选项可以用于在Export时解决2Gb的限制:   ü         将大于2Gb的文件导出到裸设备上基本上是没有

Creating DataGrid Templated Columns Dynamically - Part II(转自DotNetTips)

datagrid Creating DataGrid Templated Columns Dynamically - Part II Introduction In previous part of this article we saw how to use LoadTemplate method to dynamically add templated columns to the DataGrid. In this part we will see how to do that using

Silverlight游戏设计(Game Design):(十二)帝国时代II(Demo) 之“战争艺术”①

即时战略类型游戏因其精确的微操,宏大的场面以及丰富的策略元素广受玩家的爱戴,<沙丘魔堡II >开创了真正意义上的即时战略游戏形态,之后Westwood创生了<命令与征服>系列加之暴雪的<魔兽争 霸>及<星际争霸>系列瞬间将RTS的发展推向高潮.就是在这样的氛围下,微软的<帝国时代>系列孕 育而生,踏着人类文明进步的足迹,陪伴我度过了高中那个人生转折的年代. 本节,我将为大家讲解的是利用场景编辑器搭建的帝国时代2游戏Demo. 即时战略游戏最大的特