C. Bear and Different Names

题目连接:

http://codeforces.com/contest/791/problem/C

Description

In the army, it isn't easy to form a group of soldiers that will be effective on the battlefield. The communication is crucial and thus no two soldiers should share a name (what would happen if they got an order that Bob is a scouter, if there are two Bobs?).

A group of soldiers is effective if and only if their names are different. For example, a group (John, Bob, Limak) would be effective, while groups (Gary, Bob, Gary) and (Alice, Alice) wouldn't.

You are a spy in the enemy's camp. You noticed n soldiers standing in a row, numbered 1 through n. The general wants to choose a group of k consecutive soldiers. For every k consecutive soldiers, the general wrote down whether they would be an effective group or not.

You managed to steal the general's notes, with n - k + 1 strings s1, s2, ..., sn - k + 1, each either "YES" or "NO".

The string s1 describes a group of soldiers 1 through k ("YES" if the group is effective, and "NO" otherwise).

The string s2 describes a group of soldiers 2 through k + 1.

And so on, till the string sn - k + 1 that describes a group of soldiers n - k + 1 through n.

Your task is to find possible names of n soldiers. Names should match the stolen notes. Each name should be a string that consists of between 1 and 10 English letters, inclusive. The first letter should be uppercase, and all other letters should be lowercase. Names don't have to be existing names — it's allowed to print "Xyzzzdj" or "T" for example.

Find and print any solution. It can be proved that there always exists at least one solution.

Input

The first line of the input contains two integers n and k (2 ≤ k ≤ n ≤ 50) — the number of soldiers and the size of a group respectively.

The second line contains n - k + 1 strings s1, s2, ..., sn - k + 1. The string si is "YES" if the group of soldiers i through i + k - 1 is effective, and "NO" otherwise.

Output

Find any solution satisfying all given conditions. In one line print n space-separated strings, denoting possible names of soldiers in the order. The first letter of each name should be uppercase, while the other letters should be lowercase. Each name should contain English letters only and has length from 1 to 10.

If there are multiple valid solutions, print any of them.

Sample Input

8 3

NO NO YES YES YES NO

Sample Output

Adam Bob Bob Cpqepqwer Limak Adam Bob Adam

Hint

题意

你需要构造n个名字,满足n-k+1个要求。

如果第i个要求是YES的话,那么要求[i,i+k-1]的名字都不相同。

如果第i个要求是NO的话,那么要求[i,i+k-1]的名字至少有两个是相同的。

题解:

如果是YES的话,那么就让[i,i+k-1]里面的点相互连边,连边表示不能取相同的名字。

然后我们就开始贪心构造就好了,在满足不和相连的点取相同名字的前提下,取离自己最近的人的名字就好了。

代码

#include<bits/stdc++.h>
using namespace std; int n,k;
int flag[55];
int fa[55];
int ans[55];
int tot = 0;
int mp[55][55];
string getid(int x){
if(x<26){
string t;
t+=('A'+x);
return t;
}else{
string t = "A";
t+=(x-25+'a');
return t;
}
}
int vis[55];
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n-k+1;i++){
string op;
cin>>op;
if(op[0]=='Y'){
for(int j=i;j<i+k;j++){
for(int p=j+1;p<i+k;p++){
mp[j][p]=1;
mp[p][j]=1;
}
}
}
}
for(int i=1;i<=n;i++){
int Flag = 0;
memset(vis,0,sizeof(vis));
for(int j=i-1;j>=1;j--){
if(mp[i][j]==1){
vis[ans[j]]=1;
}
}
for(int j=i-1;j>=1;j--){
if(vis[ans[j]]==0){
ans[i]=ans[j];
Flag = 1;
break;
}
}
if(Flag==0){
for(int j=0;j<=50;j++){
if(vis[j]==0){
ans[i]=j;
break;
}
}
}
}
for(int i=1;i<=n;i++){
cout<<getid(ans[i])<<" ";
}
cout<<endl;
}

Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) C. Bear and Different Names 贪心的更多相关文章

  1. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) 菜鸡只会ABC!

    Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) 全场题解 菜鸡只会A+B+C,呈上题解: A. Bear and ...

  2. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) B - Bear and Friendship Condition 水题

    B. Bear and Friendship Condition 题目连接: http://codeforces.com/contest/791/problem/B Description Bear ...

  3. 【树形dp】Codeforces Round #405 (rated, Div. 1, based on VK Cup 2017 Round 1) B. Bear and Tree Jumps

    我们要统计的答案是sigma([L/K]),L为路径的长度,中括号表示上取整. [L/K]化简一下就是(L+f(L,K))/K,f(L,K)表示长度为L的路径要想达到K的整数倍,还要加上多少. 于是, ...

  4. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1)

    A 模拟 B 发现对于每个连通块,只有为完全图才成立,然后就dfs C 构造 想了20分钟才会,一开始想偏了,以为要利用相邻NO YES的关系再枚举,其实不难.. 考虑对于顺序枚举每一个NO/YES, ...

  5. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1)A B C 水 并查集 思路

    A. Bear and Big Brother time limit per test 1 second memory limit per test 256 megabytes input stand ...

  6. 【构造】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& ...

  7. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) E

    Description Bear Limak prepares problems for a programming competition. Of course, it would be unpro ...

  8. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) D

    Description A tree is an undirected connected graph without cycles. The distance between two vertice ...

  9. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) C

    Description In the army, it isn't easy to form a group of soldiers that will be effective on the bat ...

随机推荐

  1. 【转】每天一个linux命令(1):ls命令

    ls命令是linux下最常用的命令.ls命令就是list的缩写,缺省下ls用来打印出当前目录的清单.如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单. 通过ls命令不仅可以查看linux ...

  2. K最近邻kNN-学习笔记

    # -*- coding: utf-8 -*- """ Created on Thu Jan 24 09:34:32 2019 1. 翼尾花数据 2. 用 KNeighb ...

  3. PHP共享内存详解

    前言 在PHP中有这么一族函数,他们是对UNIX的V IPC函数族的包装. 它们很少被人们用到,但是它们却很强大.巧妙的运用它们,可以让你事倍功半. 它们包括: 信号量(Semaphores) 共享内 ...

  4. 《java程序设计》结对编程-四则运算(第一周-阶段总结)

    一.需求分析(描述自己对需求的理解,以及后续扩展的可能性) 实现一个命令行程序,要求: - 自动生成小学四则运算题目(加,减,乘,除) - 支持整数 - 支持多运算符(比如生成包含100个运算符的题目 ...

  5. Android 截屏与 WebView 长图分享经验总结

    最近在做新业务需求的同时,我们在 Android 上遇到了一些之前没有碰到过的问题,截屏分享. WebView 生成长图以及长图在各个分享渠道分享时图片模糊甚至分享失败等问题,在这过程中踩了很多坑,到 ...

  6. OneNET麒麟座应用开发之二:串口读取PM25传感器数据

    作为环境数据监测站首先要获取大气中可吸入颗粒物的数据.为了检测PM25数据,我们采用北京海联信为的HLPM025K3型号传感器,该传感器使用激光法测量PM25和PM10的数据. 该型传感器的检测对象如 ...

  7. 教你构建好 SpringBoot + SSM 框架

    来源:Howie_Y https://juejin.im/post/5b53f677f265da0f8f203914 目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵 ...

  8. java多线程快速入门(五)

    常用线程api方法 多线程运行状态 1.新建状态 用new创建一个线程 2.就绪状态 当调用线程的start()方法 3.运行状态 当线程获得cpu,开始执行run方法 4.阻塞状态 线程通过调用sl ...

  9. python 全栈开发,Day31(re模块)

    回顾昨天的内容 异常处理 try except 一定要在except之后写一些提示或者处理的内容 try: '''可能会出现异常的代码''' except ValueError: '''打印一些提示或 ...

  10. 文件中用WriteLine追加内容的两种方法

    if (!Directory.Exists("C:\\testll")) { Directory.CreateDirectory("C:\\testll"); ...