CodeForces 791C Bear and Different Names
题目描述:
输入 N 和 K ,以及 N−K+1 个 YES 或 NO ,要求生成 N 个字符串,满足如果第 i 个输入是 YES ,那么区间 [i,i+K−1] 内的字符串互不相同。
题解:
由于区间长度固定为 K ,所以第 i 和第 i+K−1 个字符串仅被一段区间同时覆盖到,因此我们先生成 N 个互不相同的字符串,如果第 i 个出入是 NO ,那么把第 i 个和第 i+K−1 个字符串变成一样的(可以证明这样做不影响其它区间)。
代码:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXN 100
static int N, K;
static char cond[10], name[MAXN][10];
int main()
{
scanf("%d%d", &N, &K);
name[0][0] = 'A';
name[0][1] = 'a';
for (int i = 1; i < N; i++)
if (name[i-1][1] == 'z')
name[i][0] = name[i-1][0] + 1, name[i][1] = 'a';
else
name[i][0] = name[i-1][0], name[i][1] = name[i-1][1] + 1;
for (int i = 0; i < N - K + 1; i++)
{
scanf("%s", cond);
if (cond[0] == 'N')
memcpy(name[i+K-1], name[i], sizeof(name[i]));
}
for (int i = 0; i < N; i++) printf("%s ", name[i]);
puts("");
return 0;
}
提交记录(AC / Total = 1 / 1):
Run ID | Remote Run ID | Time(ms) | Memory(kb) | Result | Submit Time |
---|---|---|---|---|---|
8517459 | 25701528 | 15 | 1848 | AC | 2017-03-22 07:34:07 |