J - 全都是秋实大哥

Time Limit: 5000/2000MS (Java/Others)     Memory Limit: 32000/32000KB (Java/Others)
Submit Status

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

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

如果一个字符串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 and output

Sample Input Sample Output
ab
1 2
ab
aaaaaaaaa
1 1 1 1 1 1 1 1 1
a
aaaaaaaad
1 1 1 1 1 1 1 1 9
aaaaaaaad
abbaaddaabbaadda
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 8
abbaadda
abbaabbaabbaabba
1 2 3 4 5 6 7 4 9 10 11 4 13 14 15 4
abba

解题报告:

这是一道求最小循环节题目

关键在于了解next数组的含义,next[i] 表示 0 - i-1的最大前缀后缀最大值,我们先假设它是循环的,那么显然满足i % (i - next[i]) == 0 , ( 长度是整数倍 ),之后next[i] != 0 (若为 0 ,此时前缀后缀的长度最大值0,也就是说,就是本身)

#include <iostream>
#include <cstring>
#include <cstdio> using namespace std;
const int maxn = 3e6 + ;
char s[maxn];
int len,front[maxn]; void build_front()
{
front[] = -;
int t1 = -,t2 = ;
while(t2 < len)
{
if (t1 == - || s[t1] == s[t2])
front[++t2] = ++ t1;
else
t1 = front[t1];
}
} int main(int argc,char *argv[])
{
scanf("%s",s);
len = strlen(s);
build_front();
printf("");
for(int i = ; i <= len ; ++ i)
if (i % (i-front[i]) == && front[i] != )
printf(" %d",i-front[i]);
else
printf(" %d",i);
printf("\n");
if (len % (len-front[len]) == && front[len] != )
{
int cot = len - front[len];
for(int i = ; i < cot ; ++ i)
printf("%c",s[i]);
}
else
printf("%s",s);
printf("\n");
return ;
}

UESTC_全都是秋实大哥 2015 UESTC Training for Search Algorithm & String<Problem J>的更多相关文章

  1. UESTC_基爷与加法等式 2015 UESTC Training for Search Algorithm & String<Problem C>

    C - 基爷与加法等式 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Subm ...

  2. UESTC_秋实大哥の恋爱物语 2015 UESTC Training for Search Algorithm & String<Problem K>

    K - 秋实大哥の恋爱物语 Time Limit: 5000/2000MS (Java/Others)     Memory Limit: 32000/32000KB (Java/Others) Su ...

  3. UESTC_Palindromic String 2015 UESTC Training for Search Algorithm & String<Problem M>

    M - Palindromic String Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 128000/128000KB (Java ...

  4. UESTC_韩爷的梦 2015 UESTC Training for Search Algorithm & String<Problem N>

    N - 韩爷的梦 Time Limit: 200/100MS (Java/Others)     Memory Limit: 1300/1300KB (Java/Others) Submit Stat ...

  5. UESTC_吴队长征婚 2015 UESTC Training for Search Algorithm & String<Problem E>

    E - 吴队长征婚 Time Limit: 10000/4000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  6. UESTC_基爷的中位数 2015 UESTC Training for Search Algorithm & String<Problem D>

    D - 基爷的中位数 Time Limit: 5000/3000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  7. UESTC_邱老师降临小行星 2015 UESTC Training for Search Algorithm & String<Problem B>

    B - 邱老师降临小行星 Time Limit: 10000/5000MS (Java/Others)     Memory Limit: 65536/65535KB (Java/Others) Su ...

  8. UESTC_王之迷宫 2015 UESTC Training for Search Algorithm & String<Problem A>

    A - 王之迷宫 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  ...

  9. UESTC_Ferris Wheel String 2015 UESTC Training for Search Algorithm & String<Problem L>

    L - Ferris Wheel String Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 43000/43000KB (Java/ ...

随机推荐

  1. PhpForm表单相关的超全局变量操作

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. UVALive 6190 Beautiful Spacing (2012 Tokyo regional)

    Beautiful Spacing 题意是给一个文本排版,求在满足题目所给要求的条件下,最长连续空格最小是多少. trick: 贪心地模拟是错的,至少无法证明正确性. 正解应该是二分答案+验证. 比较 ...

  3. The 4th tip of DB Query Analyzer

    The 4th tip of DB QueryAnalyzer Ma Genfeng (Guangdong Unitoll Services incorporated, Guangzhou 51030 ...

  4. Linux shell编程02 shell程序的执行 及文件权限

    第一个shell脚本 1.       shell编程的方式 交互式shell编程 非交互式shell编程:执行的语句存放到一个文件 shell脚本:可以任意文件名,建议扩展名为sh 2.       ...

  5. Java实现将指定目录内的指定类型的文件归类

    这两天在学Java IO流,正好让我产生了将自己的电子书归类的打算,说做就做,Why not?看着自己所学所用能解决生活中的实际问题,是不是非常有成就感,那是必须的! package DepthSea ...

  6. [CSS] CSS Transitions: Delays and Multiple Properties

    <!DOCTYPE html> <html> <head> <script src="https://code.jquery.com/jquery- ...

  7. EffectiveC#17--装箱和拆箱的最小化

    1.如下这段代码会经历装箱和拆箱.例如25会先装箱成object后传递给writeline方法(一次拷贝),在方法内部又 经历拆箱成int(第二次拷贝)后然后调用tostring(). Console ...

  8. css3实现手机菜单展开收起动画

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  9. tomcat6.0目录和server.xml详解

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,目前最新版本是6.x,相对5.x性能提升很多,主要优化了内存使用,增强IO能力,重新构造集群功能. 近期对Tomcat6.x作深入学习, ...

  10. UNION ALL

    select field1,field2,field3,field4 from table1 where ... UNION ALL select field1,field2,field3,field ...