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。

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

 #include<set>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 1000002
using namespace std;
int next[N],l[N],n,ans;
char a[N];
inline void get_next(){
for(int i=,j=;i<=n;i++){
while(j&&a[i]!=a[j+]) j=next[j];
j+=(a[i]==a[j+]);
next[i]=j;
}
}
inline bool chk(int k){
return !(n%(n-k));
}
inline void init(){
while(true){
scanf("%s",a+);
n=strlen(a+);
if(n==&&a[]=='.') break;
fill(next+,next++n,);
get_next();
for(ans=next[n];ans;ans=next[ans])
if(chk(ans)) break;
ans=n-ans;
printf("%d\n",n/ans);
}
}
int main(){
freopen("pow.in","r",stdin);
freopen("pow.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return ;
}

[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. php碎片

    1.flock LOCK_EX 独占锁定 LOCK_SH 共享锁定 LOCK_UN 解除锁定 LOCK_NB 锁定但不堵塞进程,直接返回false 2. fseek SEEK_CUR SEEK_END ...

  2. css布局多列等高

    css .content{margin:0 auto;width: 600px;border: 3px solid #00c;overflow: hidden;} .left{float: left; ...

  3. 【C#】【Thread】Semaphore/SemaphoreSlim信号量

    System.Threading.Semaphore 类表示一个命名(系统范围)信号量或本地信号量. 它是一个对 Win32 信号量对象的精简包装. Win32 信号量是计数信号量,可用于控制对资源池 ...

  4. 在iframe中获取本iframe DOM引用

    window.frameElement 获取本iframe DOM window.frameElement.contentDocument.getElementById('id') 获取这个ifram ...

  5. java的守护线程与非守护线程

    最近重新研究Java基础知识,发现以前太多知识知识略略带过了,比较说Java的线程机制,在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) ,(PS:以 ...

  6. 求连续最大子序列积 - leetcode. 152 Maximum Product Subarray

    题目链接:Maximum Product Subarray solutions同步在github 题目很简单,给一个数组,求一个连续的子数组,使得数组元素之积最大.这是求连续最大子序列和的加强版,我们 ...

  7. WPF制作的小型笔记本-仿有道云笔记

    楼主所在的公司不允许下载外部资源, 不允许私自安装应用程序, 平时记录东西都是用记事本,时间久了很难找到以前记的东西. 平时在家都用有道笔记, 因此就模仿着做了一个, 先看下实际运行图片: 1. 初始 ...

  8. 在Windows上将ReactNative集成到现有的Android项目

    React Natvie的官方文档的 Integrating with Existing Apps 已经很详细地教我们如何将React Natvie集成到现在的Android项目.我根据官方文档的步骤 ...

  9. linux的点滴积累

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #839496; background-color: rgba(1 ...

  10. flash

    1. 1.这种方式已经比较旧了, 2. html.push('<div class="flash-ad" style = "position:relative&qu ...