BZOJ 4974: 字符串大师 KMP
2017-08-21 16:00
357 查看
4974: 字符串大师
Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 155 Solved: 43
[Submit][Status][Discuss]
Description
一个串T是S的循环节,当且仅当存在正整数k,使得S是T^k(即T重复k次)的前缀,比如abcd是abcdabcdab的循环节。给定一个长度为n的仅由小写字符构成的字符串S,请对于每个k(1<=k<=n),求出S长度为k的前缀的最短循环节的长度per_i。字符串大师小Q觉得这个问题过于简单,于是花了一分钟将其AC了,他想检验你是否也是字符串大师。小Q告诉你n以及per_1,per_2,...,per_n,请找到一个长度为n的小写字符串S,使得S能对应上per。Input
第一行包含一个正整数n(1<=n<=100000),表示字符串的长度。第二行包含n个正整数per_1,per_2,...per_n(1<=per_i<=i),表示每个前缀的最短循环节长度。
输入数据保证至少存在一组可行解。
Output
输出一行一个长度为n的小写字符串S,即某个满足条件的S。若有多个可行的S,输出字典序最小的那一个。
Sample Input
51 2 2 2 5
Sample Output
ababb考场上想这个来着,但就是觉得特虚,就没敢写
求神犇帮我证明为什么KMP不会退化
还有当无解的时候会不会退化啊啊啊
好吧我证出来了。。。但上面就不删了
出现一个nt为0时跳nt次数一定小于等于它与前一个nt为零之间的长度
#include<cmath> #include<ctime> #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #include<iomanip> #include<vector> #include<string> #include<bitset> #include<queue> #include<set> #include<map> using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();} return x*f; } void print(int x) {if(x<0)x=-x,putchar('-');if(x>=10)print(x/10);putchar(x%10+'0');} const int N=100100; int a ,nt ; bool book[27]; int main() { int n=read(); register int i,k; for(i=1;i<=n;++i) { nt[i]=i-read(); if(nt[i]){a[i]=a[nt[i]];} else { memset(book,0,sizeof(book)); k=nt[i-1];book[a[k+1]]=1; while(k)k=nt[k],book[a[k+1]]=1; for(k=1;k<27;++k)if(!book[k]){a[i]=k;break;} } } for(i=1;i<=n;++i)putchar('a'+a[i]-1);puts(""); return 0; } /* 5 1 2 2 2 5 ababb */
相关文章推荐
- [BZOJ]4974: 字符串大师 KMP
- 【BZOJ4974】字符串大师 KMP
- 【bzoj4974】字符串大师 逆模拟KMP
- bzoj 4974: 字符串大师
- [BZOJ4974]字符串大师
- bzoj 4974: 字符串大师
- [BZOJ4974][Lydsy八月月赛]字符串大师-KMP算法
- bzoj 4974: [Lydsy八月月赛]字符串大师
- [BZOJ 1461] 字符串的匹配 · KMP & 树状数组
- BZOJ 5130([Lydsy12月赛]字符串的周期-最小表示法+kmp)
- BZOJ_P3670 [NOI2014]动物园(字符串+KMP)
- 【bzoj5130】[Lydsy12月赛]字符串的周期 DFS+KMP
- 字符串(KMP):BZOJ 3670 [Noi2014]动物园
- hdu4552怪盗基德的挑战书 --KMP求字符串所有的前缀数
- bzoj3059 归途与征程(字符串,优化dp)
- bzoj3796 Mushroom追妹纸(SA+二分答案+kmp)
- 【BZOJ4180】字符串计数
- KMP字符串模式匹配详解
- 【BZOJ 1856】【SCOI 2010】字符串
- [bzoj3473][bzoj3277][后缀数组]字符串