不难发现结论
peri=i−nexti
,
next
就是kmp里的失配数组。
考虑构造一个字符串
s
满足上述
代码:
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=100010;
int n,fail[maxn],ans[maxn];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&fail[i]);
fail[i]=i-fail[i];
}
fail[0]=-1;
for(int i=1;i<=n;i++)
if(fail[i]) ans[i]=ans[fail[i]];
else for(int p=fail[i-1];p>=0;p=fail[p]) ans[i]=max(ans[i],ans[p+1]+1);
for(int i=1;i<=n;i++)
printf("%c",ans[i]+'a');
return 0;
}