全都是秋实大哥

Time Limit: 20 Sec  Memory Limit: 256 MB

题目连接

http://acm.uestc.edu.cn/#/contest/show/61

Description

秋实大哥是一个多愁善感的人,偶尔也会唱唱两句伤情的歌。每次唱完后,秋实大哥都能解决一道问题!这次也不例外。

秋实大哥告诉了你 一些关于这个问题的信息

如果一个字符串S是由若干个子串a连续拼接而成的,则称a是S的循环节,即A=a+a+...+a。比如 aba 是 abaabaaba 的循环节。
    一个字符串可能存在多个循环节,比如 aaaaaaaa ,含有4个循环节,分别是 a , aa , aaaa , aaaaaaaa 。很显然,一个字符串是其本身的循环节。在这4个循环节中,长度最小的是"a",所以"a"是S的最小循环节。
    字符串所有循环节里长度最小的循环节,就是该字符串的最小循环节。
    一个长度为N的字符串,含有N个非空前缀。定义P(i)表示S的第i个非空前缀(0≤i<|S|),P(i)=S012...i。比如"abcde"含有5个非空前缀,分别是"a",“ab”,“abc”,“abcd”,“abcde”。

现给一个字符串S,请先按顺序输出S的每一个非空前缀的最小循环节的长度,然后,再输出S的最小循环节。

秋实大哥唱完了,问题也解决了,现在他请你来解决这个问题。

Input

第一行输入一个字符串S(0<|S|≤3⋅106),S只含有小写英文字母(a-z)

Output

第一行输出 |S| 个数,分别表示S的每一个非空前缀的最小循环节的长度,每两个数用一个空格隔开,最后一个数后面不要有空格。

第二行输出一个字符串,表示S的最小循环节。

Sample Input

abbaabbaabbaabba

Sample Output

1 2 3 4 5 6 7 4 9 10 11 4 13 14 15 4
abba

HINT

题意

题解:

最小循环节, 用kmp来解决就好

理解next数组的含义,这道题就很简单了

代码:

//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 4000001
#define mod 10007
#define eps 1e-9
int Num;
char CH[];
//const int inf=0x7fffffff; //нчоч╢С
const int inf=0x3f3f3f3f;
/* inline void P(int x)
{
Num=0;if(!x){putchar('0');puts("");return;}
while(x>0)CH[++Num]=x%10,x/=10;
while(Num)putchar(CH[Num--]+48);
puts("");
}
*/
inline ll read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
inline void P(int x)
{
Num=;if(!x){putchar('');puts("");return;}
while(x>)CH[++Num]=x%,x/=;
while(Num)putchar(CH[Num--]+);
puts("");
}
//************************************************************************************** char s[maxn];
int p[maxn];
int main()
{
scanf("%s",s+);
int len=strlen(s+);
int j=;
for(int i=;i<=len;i++)
{
while(j>&&s[j+]!=s[i])
j=p[j];
if(s[j+]==s[i])
j++;
p[i]=j;
}
int tmp=;
int first=;
for(int i=;i<=len;i++)
{
if(i%(i-p[i])==)
tmp=(i-p[i]);
else
tmp=i;
if(first)
{
printf("%d",tmp);
first=;
}
else
printf(" %d",tmp);
}
printf("\n");
for(int i=;i<=tmp;i++)
printf("%c",s[i]);
}

2015 UESTC 搜索专题J题 全都是秋实大哥 kmp的更多相关文章

  1. 2015 UESTC 搜索专题M题 Palindromic String 马拉车算法

    Palindromic String Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/s ...

  2. 2015 UESTC 搜索专题K题 秋实大哥の恋爱物语 kmp

    秋实大哥の恋爱物语 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 De ...

  3. 2015 UESTC 搜索专题N题 韩爷的梦 hash

    韩爷的梦 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Descrip ...

  4. 2015 UESTC 搜索专题F题 Eight Puzzle 爆搜

    Eight Puzzle Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 ...

  5. 2015 UESTC 搜索专题B题 邱老师降临小行星 记忆化搜索

    邱老师降临小行星 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Des ...

  6. 2015 UESTC 搜索专题E题 吴队长征婚 爆搜

    吴队长征婚 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Descri ...

  7. 2015 UESTC 搜索专题D题 基爷的中位数 二分

    基爷的中位数 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Descr ...

  8. 2015 UESTC 搜索专题C题 基爷与加法等式 爆搜DFS

    基爷与加法等式 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Desc ...

  9. 2015 UESTC 搜索专题A题 王之迷宫 三维bfs

    A - 王之迷宫 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Des ...

随机推荐

  1. 【Git】git clone与git pull区别

    从字面意思也可以理解,都是往下拉代码,git clone是克隆,git pull 是拉.但是,也有区别: 从远程服务器克隆一个一模一样的版本库到本地,复制的是整个版本库,叫做clone.(clone是 ...

  2. Mysql储存过程6: in / out / inout

    in 为向函数传送进去的值 out 为函数向外返回的值 intout 传送进去的值, 并且还返回这个值 )) begin then select 'true'; else select 'false' ...

  3. 海洋CMS v6.53 v6.54命令执行

    测试下载地址:https://pan.baidu.com/s/1jHQBKFk 至于分析实在是看的一脸懵逼就不累赘了.直接上exp POST /haiyang/upload/search.php HT ...

  4. 内存不够清理方法,costdown项目时如果裁剪不下来,也可以参考

    Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total used free shared ...

  5. static作用(修饰函数、局部变量、全局变量)转自http://www.cnblogs.com/stoneJin/archive/2011/09/21/2183313.html

    static作用(修饰函数.局部变量.全局变量) 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件 ...

  6. kvm安装准备

    到实际情况下,做虚拟化是直接做在真机上. 但实验时,可以在虚拟机上进行.(因为做实验的时候没办法连接到桥接模式的网络,所以使用了NAT方式来连接网络) 在vmware安装centos 64bit fo ...

  7. /proc文件夹介绍

    Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过 ...

  8. Robust Online Visual Tracking with a Single Convolutional Neural Network

    Abstract:这篇论文有三个贡献,第一提出了新颖的简化的结构损失函数,能保持尽量多的训练样本,通过适应模型输出的不确定性来减少跟踪误差累积风险. 第二是增强了普通的SGD,采用了暂时的选择策略来进 ...

  9. 如何关闭WordPress后台的主题、插件、版本更新通知?

    由于WordPress 更新速度非常快,不论是主题 插件或是版本,每个月少说要执行个好几次,因为更新快,所以WordPress后台加入了更新通知,提醒使用者有新版本了,可以进行插件.主题或是系统更新, ...

  10. Hadoop案例(六)小文件处理(自定义InputFormat)

    小文件处理(自定义InputFormat) 1.需求分析 无论hdfs还是mapreduce,对于小文件都有损效率,实践中,又难免面临处理大量小文件的场景,此时,就需要有相应解决方案.将多个小文件合并 ...