UESTC_全都是秋实大哥 2015 UESTC Training for Search Algorithm & String<Problem J>
J - 全都是秋实大哥
Time Limit: 5000/2000MS (Java/Others) Memory Limit: 32000/32000KB (Java/Others)
秋实大哥是一个多愁善感的人,偶尔也会唱唱两句伤情的歌。每次唱完后,秋实大哥都能解决一道问题!这次也不例外。
秋实大哥告诉了你 一些关于这个问题的信息
如果一个字符串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 |
aaaaaaaaa |
1 1 1 1 1 1 1 1 1 |
aaaaaaaad |
1 1 1 1 1 1 1 1 9 |
abbaaddaabbaadda |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 8 |
abbaabbaabbaabba |
1 2 3 4 5 6 7 4 9 10 11 4 13 14 15 4 |
解题报告:
这是一道求最小循环节题目
关键在于了解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>的更多相关文章
- UESTC_基爷与加法等式 2015 UESTC Training for Search Algorithm & String<Problem C>
C - 基爷与加法等式 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Subm ...
- UESTC_秋实大哥の恋爱物语 2015 UESTC Training for Search Algorithm & String<Problem K>
K - 秋实大哥の恋爱物语 Time Limit: 5000/2000MS (Java/Others) Memory Limit: 32000/32000KB (Java/Others) Su ...
- 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 ...
- 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 ...
- UESTC_吴队长征婚 2015 UESTC Training for Search Algorithm & String<Problem E>
E - 吴队长征婚 Time Limit: 10000/4000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_基爷的中位数 2015 UESTC Training for Search Algorithm & String<Problem D>
D - 基爷的中位数 Time Limit: 5000/3000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_邱老师降临小行星 2015 UESTC Training for Search Algorithm & String<Problem B>
B - 邱老师降临小行星 Time Limit: 10000/5000MS (Java/Others) Memory Limit: 65536/65535KB (Java/Others) Su ...
- UESTC_王之迷宫 2015 UESTC Training for Search Algorithm & String<Problem A>
A - 王之迷宫 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- 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/ ...
随机推荐
- Hdu3436-Queue-jumpers(伸展树)
Description Ponyo and Garfield are waiting outside the box-office for their favorite movie. Because ...
- 【HDU1301】Jungle Roads(MST基础题)
爽爆.史上个人最快MST的记录7分40s..一次A. #include <iostream> #include <cstring> #include <cstdlib&g ...
- Java实现配置加载机制
前言 现如今几乎大多数Java应用,例如我们耳熟能详的tomcat, struts2, netty…等等数都数不过来的软件,要满足通用性,都会提供配置文件供使用者定制功能. 甚至有一些例如Netty这 ...
- The method setOnClickListener(View.OnClickListener) in the type View is not applicable
开始学习 android 了,学习的是高明鑫老师的android视频教程(android视频教学). 学到第八讲时, 在写动态设置时报错: The method setOnClickListener( ...
- Hibernate自定义主键
Hibernate自定义主键,通过此方法可以解决一此特殊的主键ID,在了解自定义主键时,先了解下Hibernate有自带的10种生成主键方法. 1) assigned主键由外部程序负责生成,无需Hib ...
- hdu 5612 Baby Ming and Matrix games(dfs暴力)
Problem Description These few days, Baby Ming is addicted to playing a matrix game. Given a n∗m matr ...
- C#模拟网站用户登录
我们在写灌水机器人.抓资源机器人和Web网游辅助工具的时候第一步要实现的就是用户登录.那么怎么用C#来模拟一个用户的登录拉?要实现用户的登录,那么首先就必须要了解一般网站中是怎么判断用户是否登录的. ...
- Promise 异步执行的同步操作
Promise 是用来执行异步操作的. 但有时一个异步操作需要等其他的异步操作完成,这时候就可以使用then来做. function loadImageAsync(url) { return new ...
- Good Teacher(模拟)
Good Teacher Time Limit:1000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Statu ...
- mac下显示隐藏文件
一.在终端中 ls -a就可以查看隐藏文件. 显示和隐藏的命令例如以下: 显示:defaults write com.apple.finder AppleShowAllFiles -bool true ...