1. 程式人生 > >bzoj 4974 字串大師

bzoj 4974 字串大師

相當於告訴你nxt陣列 如果nxt!=0,那麼直接賦值。 否則選一個可以選的最小值即可。

#include<bits/stdc++.h>
#define gc getchar()
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define Rep(i,v) rep(i,0,(int)v.size()-1)
#define lint long long
#define db double
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define
debug(x) cerr<<#x<<"="<<x
#define sp <<" " #define ln <<endl using namespace std; typedef pair<int,int> pii; typedef set<int>::iterator sit; inline int inn() { int x,ch;while((ch=gc)<'0'||ch>'9'); x=ch^'0';while((ch=gc)>='0'&&ch<='9'
) x=(x<<1)+(x<<3)+(ch^'0');return x; } char s[100010];bool ban[100];int nxt[100010]; int main() { int n=inn(); rep(i,1,n) { int x=i-inn();nxt[i]=x; if(i==1) s[1]='a'; else if(!x) { memset(ban,false,sizeof(bool)*(30)); for(int
j=i-1;j;j=nxt[j]) ban[s[nxt[j]+1]-'a']=1; rep(j,'a','z') if(!ban[j-'a']) { s[i]=j;break; } } else{ s[i]=s[x]; } printf("%c",s[i]); } return !printf("\n"); }