【构造】Codeforces Round #405 (rated, Div. 1, based on VK Cup 2017 Round 1) A. Bear and Different Names

 如果某个位置i是Y,直接直到i+m-1为止填上新的数字。

如果是N,直接把a[i+m-1]填和a[i]相同即可,这样不影响其他段的答案。

当然如果前面没有过Y的话,都填上0就行了。

#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int n,m,a[60],e;
string ma[60];
int main(){
//	freopen("a.in","r",stdin);
	char op[10];
	for(int i=1;i<=26;++i){
		ma[i]+=(i+'A'-1);
	}
	for(int i=27;i<=50;++i){
		ma[i]+=(i-27+'A');
		ma[i]+='a';
	}
	ma[0]="Bb";
	scanf("%d%d",&n,&m);
	for(int i=1,j=1;i<=n-m+1;++i){
		scanf("%s",op);
		if(op[0]=='Y'){
			for(;j<=i+m-1;++j){
				a[j]=e++;
			}
		}
		else{
			a[j++]=a[i];
		}
	}
	for(int i=1;i<n;++i){
		cout<<ma[a[i]]<<' ';
	}
	cout<<ma[a[n]]<<endl;
	return 0;
}
原文地址:https://www.cnblogs.com/autsky-jadek/p/6580201.html