首页 > 其他 > 详细

Codeforces Round #659【部分题解】

时间:2020-07-26 19:56:56      阅读:61      评论:0      收藏:0      [点我收藏+]

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\),将 \(s_i\) 的前 \(a_i\) 位构造得和 \(s_{i-1}\) 相同,后 \(|s_{i-1}|- a_i\) 位和 \(s_{i-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;
}

Codeforces Round #659【部分题解】

原文:https://www.cnblogs.com/liuzongxin/p/13380767.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!