Codeforces Round #659【部分題解】
阿新 • • 發佈:2020-07-26
Div.2 A
Statement
給定 \(n\) 個正整數 \(a_{1,2,...,n}\),要求構造出 \(n+1\) 個長度不超過 \(200\) 的字串 \(s_1,s_2,...,s_{n+1}\),使得 \(\forall 1 \leq i \leq n\),\(s_i\) 和 \(s_{i+1}\) 的最長公共字首長度為 \(a_i\)。
Limits
多組資料,資料組數 \(\leq 100\),\(1 \leq n \leq 100,0 \leq a_i \leq 50, \sum n \leq 100\)
Solution
考慮構造出足夠長的 \(s_1\),然後對於每一個 \(1 < i \leq n+1\)
Code
# include <bits/stdc++.h> # define rr const int N=110,INF=0x3f3f3f3f; char s[N]; int n; int a[N]; char temp[N]; inline int read(void){ int res,f=1; char c; while((c=getchar())<'0'||c>'9') if(c=='-')f=-1; res=c-48; while((c=getchar())>='0'&&c<='9') res=res*10+c-48; return res*f; } int main(void){ int T=read(); while(T--){ n=read(); for(rr int i=1;i<=n;++i){ a[i]=read(); } a[n+1]=0; for(rr int i=1;i<=100;++i){ s[i]='a',putchar('a'); } puts(""); for(rr int i=1;i<=n;++i){ for(rr int j=1;j<=100;++j){ if(j<=a[i]){ temp[j]=s[j]; }else{ temp[j]=(s[j]=='z')?('x'):'z'; } putchar(temp[j]); } puts(""); for(rr int j=1;j<=100;++j){ s[j]=temp[j]; } } } return 0; }