题目链接:http://codeforces.com/contest/791/problem/C 题意:给你n和k,表示有n个士兵,下面有n-k+1个字符串,表示对i到i+k-1的士兵的判断,如果i到i+k-1的士兵没有名字重复的,那就是
题目链接:http://codeforces.com/contest/791/problem/C
题意:给你n和k,表示有n个士兵,下面有n-k+1个字符串,表示对i到i+k-1的士兵的判断,如果i到i+k-1的士兵没有名字重复的,那就是YES,否则NO,让你输出一个符合输入的字符串序列
解析:首先名字的组成很重要:”[A-Z][a-z]{0,9}”,其次是怎么搞,其实先构造出YES的很简单,全都不一样就好了,那么剩下的就是NO的部分了,既然只要有重复就是NO,那么我们直接让a[i+k-1] = a[i]就好了
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <iostream>
#include <set>
#include <map>
using namespace std;
const int maxn = 2e5+100;
string a[105];
int vis[105];
string slove(int i)
{
string tmp = "A";
if(i-1+'A'>'Z')
return tmp+char(i-27+'a');
else
return tmp = char(i-1+'A');
}
int main()
{
int n,k;
scanf("%d %d",&n,&k);
for(int i=1;i<=n-k+1;i++)
cin>>a[i];
memset(vis,0,sizeof(vis));
int ans = 1;
for(int i=1;i<=n;i++)
vis[i] = ans++;
for(int i=1;i<=n+k-1;i++)
{
if(a[i]=="NO")
vis[i+k-1] = vis[i];
}
for(int i=1;i<=n;i++)
{
if(i!=1)
cout<<" ";
cout<<slove(vis[i]);
}
puts("");
return 0;
}