题目链接:http://codeforces.com/contest/771/problem/B
题意:有n个士兵,下面有n-k+1个字符串,表示对i到i+k-1的士兵的判断,如果i到i+k-1的士兵没有名字重复的,那就是YES,否则NO,让你输出一个符合输入的字符串序列,名字要是第一个大写后面的小写。
思路:是YES就直接输出不一样的,NO只要把第i+k-1个构造成和第i个一样就行了。
代码:
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define eps 1e-8
#define fuck(x) cout<<"<"<<x<<">"<<endl
#define fi first
#define se second
#define pb push_back
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
using namespace std;
typedef long long LL;
typedef unsigned long long uLL;
typedef pair<int, int> pii;
const double PI = acos(-1.0);
const LL INFLL = 0x3f3f3f3f3f3f3f3fll;
const int maxn = 2e5 + 5;
const int mod = 1e9 + 7;
int n,k;
char ans[55][3];
int main() {
cin>>n>>k;
char ch1='A',ch2='a';
for (int i=0;i<n-k+1;i++) {
string s;
cin>>s;
if (i==0){
if (s=="YES"){
for (int j=i;j<i+k;j++){
ans[j][0]=ch1;
ans[j][1]=ch2++;
if (ch2>'z') ch1='B',ch2='a';
}
}
else {
ans[i][0]=ans[i+k-1][0]=ch1;
ans[i][1]=ans[i+k-1][1]=ch2++;
for (int j=i+1;j<i+k-1;j++){
ans[j][0]=ch1;
ans[j][1]=ch2++;
if (ch2>'z') ch1='B',ch2='a';
}
}
}
else {
if (s=="YES"){
ans[i+k-1][0]=ch1;
ans[i+k-1][1]=ch2++;
}
else {
ans[i+k-1][0]=ans[i][0];
ans[i+k-1][1]=ans[i][1];
}
if (ch2>'z') ch1='B',ch2='a';
}
}
for (int i=0;i<n;i++){
cout<<ans[i][0]<<ans[i][1]<<" ";
}
cout<<endl;
return 0;
}