字符串大师

#include<bits/stdc++.h>
using namespace std;
const int N=100000+10;
char a[N];
int cnt;
int n;
int p[N],nxt[N];
bool v[N];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&p[i]);
        nxt[i]=i-p[i];
    }
    a[1]='a';
    for(int i=2;i<=n;i++){
        if(!nxt[i]){
            memset(v,0,sizeof v);
            int j;
            while(1){
                j=nxt[i-1];
                v[a[j+1]-'a']=1;
                if(j==0) break;
            }
            for(int k=0;k<26;k++){
                if(!v[k]) {
                    a[i]=k+'a';break;
                }
            }
        }
        else {
            int j;
            j=nxt[i-1];
            while(1){
                if(j+1==nxt[i]) break;
                j=nxt[j];
            }
            a[i]=a[j+1];
        }
    }
    printf("%s",a);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Miracevin/p/9175296.html