Description

对于两个字符串a,b,定义a×b为将b接到a的末尾组成新的字符串。对于一个字符串a的幂运算的定义与我们在数学中的定义一样:a0=''(空字符),an+1=an×a。

Input

输入数据每一行为一个字符串,长度为L(1<=L<=1000000)。输入数据以'.'结尾。

Output

对于每个字符串s,输出最大的n使得字符串s满足条件:s=an(a为一个字符串)。

Sample Input

abcd

aaaa

ababab

.

Sample Output

1

4

3

Solution

题意就是给你一个字符串,求这个字符串是为哪个子串循环而成的,要求子串循环的次数最大。

因为是字符串,而且需要自我匹配,就会想到kmp的next[]。

然后通过一些模拟后发现,如果一个字符串s是有其长度为l的子串a循环而成的,则将s左移或右移l为后得到s',s'与s在第1...n-l位依然重合(如下图)。

还有一个需要考虑的是,l必须为s的因数,否则无法形成s。

到这里,问题就基本解决了,具体细节参见代码。

  1. #include<set>
  2. #include<cmath>
  3. #include<ctime>
  4. #include<queue>
  5. #include<stack>
  6. #include<cstdio>
  7. #include<vector>
  8. #include<string>
  9. #include<cstring>
  10. #include<cstdlib>
  11. #include<iostream>
  12. #include<algorithm>
  13. #define N 1000002
  14. using namespace std;
  15. int next[N],l[N],n,ans;
  16. char a[N];
  17. inline void get_next(){
  18. for(int i=,j=;i<=n;i++){
  19. while(j&&a[i]!=a[j+]) j=next[j];
  20. j+=(a[i]==a[j+]);
  21. next[i]=j;
  22. }
  23. }
  24. inline bool chk(int k){
  25. return !(n%(n-k));
  26. }
  27. inline void init(){
  28. while(true){
  29. scanf("%s",a+);
  30. n=strlen(a+);
  31. if(n==&&a[]=='.') break;
  32. fill(next+,next++n,);
  33. get_next();
  34. for(ans=next[n];ans;ans=next[ans])
  35. if(chk(ans)) break;
  36. ans=n-ans;
  37. printf("%d\n",n/ans);
  38. }
  39. }
  40. int main(){
  41. freopen("pow.in","r",stdin);
  42. freopen("pow.out","w",stdout);
  43. init();
  44. fclose(stdin);
  45. fclose(stdout);
  46. return ;
  47. }

[poj2406] Power Strings的更多相关文章

  1. poj2406 Power Strings(kmp)

    poj2406 Power Strings(kmp) 给出一个字符串,问这个字符串是一个字符串重复几次.要求最大化重复次数. 若当前字符串为S,用kmp匹配'\0'+S和S即可. #include & ...

  2. POJ2406 Power Strings —— KMP or 后缀数组 最小循环节

    题目链接:https://vjudge.net/problem/POJ-2406 Power Strings Time Limit: 3000MS   Memory Limit: 65536K Tot ...

  3. poj2406 Power Strings(kmp失配函数)

    Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 39291 Accepted: 16315 Descr ...

  4. poj2406 Power Strings (kmp 求最小循环字串)

    Power Strings   Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 47748   Accepted: 19902 ...

  5. POJ2406 Power Strings KMP算法

    给你一个串s,如果能找到一个子串a,连接n次变成它,就把这个串称为power string,即a^n=s,求最大的n. 用KMP来想,如果存在的话,那么我每次f[i]的时候退的步数应该是一样多的  譬 ...

  6. poj2406 Power Strings 【KMP】

    Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc&quo ...

  7. POJ2406 Power Strings(KMP)

    Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 56162   Accepted: 23370 Description Giv ...

  8. 【kmp算法】poj2406 Power Strings

    如果next[n]<n/2,一定无解. 否则,必须要满足n mod (n-next[n]) = 0 才行,此时,由于next数组的性质,0~n-next[n]-1的部分一定是最小循环节. [ab ...

  9. kuangbin专题十六 KMP&&扩展KMP POJ2406 Power Strings

    Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc&quo ...

  10. KMP——POJ-3461 Oulipo && POJ-2752 Seek the Name, Seek the Fame && POJ-2406 Power Strings && POJ—1961 Period

    首先先讲一下KMP算法作用: KMP就是来求在给出的一串字符(我们把它放在str字符数组里面)中求另外一个比str数组短的字符数组(我们叫它为ptr)在str中的出现位置或者是次数 这个出现的次数是可 ...

随机推荐

  1. Log4net在类库中的用法

    app.config应当放置在解决方案的根目录下.具体流程如下: 第一步:应该下载log4net.dll并引入到你的项目中,下载见附件 第二步:需要配置相关的配置文件App.config或Web.co ...

  2. 在Azure上搭建Orchard CRM入口网站

    这是英文版:Setup Orchard CRM portal website on Azure

  3. noi题库(noi.openjudge.cn) 1.9编程基础之顺序查找T06——T15

    T06 笨小猴 描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词 ...

  4. caffe的python接口学习(1):生成配置文件

    caffe是C++语言写的,可能很多人不太熟悉,因此想用更简单的脚本语言来实现.caffe提供matlab接口和python接口,这两种语言就非常简单,而且非常容易进行可视化,使得学习更加快速,理解更 ...

  5. typedef 和define的区别

    总结一下typedef和#define的区别 1.概念 #define 它在编译预处理时进行简单的替换,不作正确性检查.它是预处理指令. typedef 它在自己的作用域内给一个已经存在的类型一个别名 ...

  6. dnsunlocker解决

    环境:windows 10 中文企业版,firefox47, chrome51 安装了某个国外程序后,浏览器各种不正常,打开网页慢,或是无法打开,更严重的是会弹广告,各种广告. 然后在控制面板中卸载了 ...

  7. IE对象最后一个属性后不要加逗号,否则在IE7及以下版本中会报错

    某函数返回一个对象,如果在最后一个属性后加逗号,IE7及以下版本中会报错 正确代码: return{ top:rect.top-top, bottom:rect.bottom-top, left:re ...

  8. PHP include语句和require语句

    <?php /* PHP include语句和require语句 include和require 语句是相同的 除了错误处理方面: *require 会生成致命错误,并停止脚本 *include ...

  9. js原型继承的几种方式

    1. 原型链继承 2,构造函数继承(对象冒充继承) 3,组合继承(原型链继承+构造函数继承) 4,原型式继承 5. 寄生组合式继承 一.原型链继承 function Show(){ this.name ...

  10. Java开发利器Myeclipse全面详解

    Java开发利器Myeclipse全面详解: Ctrl+1:修改代码错误 Alt+Shift+S:Source命令 Ctrl+7:单行注释 Ctrl+Shift+/ :多行注释 Ctrl+I :缩进( ...