【codeforces 791C】Bear and Different Names
【题目链接】:http://codeforces.com/contest/791/problem/C
【题意】
给你n-k+1个限制
要求
a[i]..a[i]+k-1里面有相同的元素,或全都不同;
让你输出可能的一个序列
【题解】
先找到YES的一段
(找不到就全都输出一样的);
然后以这段YES作为种子
假设YES的段为pos..pos+k-1
往左往右构造
如果往左构造的话
就是for (int i = pos-1;i>=1;i–)
接下来要给第i个位置确定数字;
则如果i..i+k-1为YES的话
就取[i..i+k-1]中最小的未出现的那个数字;
如果i..i+k-1为NO的话
就取ans[i]=ans[i+k-1];
这样
ans[i..i+k]全都是不一样的;
就不会对再往左的答案造成影响.
往右的话
YES的情况相同
NO的情况变成ans[i]取ans[i-k+1]了.
【完整代码】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%lld",&x)
#define ref(x) scanf("%lf",&x)
typedef pair<int, int> pii;
typedef pair<LL, LL> pll;
const int dx[9] = { 0,1,-1,0,0,-1,-1,1,1 };
const int dy[9] = { 0,0,0,-1,1,-1,1,-1,1 };
const double pi = acos(-1.0);
const int N = 50 + 20;
int n, k, cnt1, po;
int ok[N], ans[N];
int bo[N];
char s[6];
string tar[N];
void in()
{
rei(n), rei(k);
rep1(i, 1, n - k + 1)
{
scanf("%s", s);
if (s[0] == 'N')
ok[i] = 0;
else
{
ok[i] = 1;
cnt1++;
po = i;
}
}
}
void zhitrue(int pos, int l, int r)
{
rep1(i, 0, n)
bo[i] = 0;
rep1(i, l, r)
bo[ans[i]]++;
int x = 0;
while (bo[x]) x++;
ans[pos] = x;
}
void zhifalse(int pos, int l, int r,int p)
{
if (p == 1)
{
ans[pos] = ans[r];
}
else
{
ans[pos] = ans[l];
}
}
void ga()
{
if (cnt1 == 0)
{
rep1(i, 1, n)
ans[i] = 1;
}
else
{
rep1(i, po, po + k - 1)
zhitrue(i, po, po + k - 1);
rep2(i, po - 1, 1)
{
if (ok[i])
zhitrue(i, i, i + k - 1);
else
zhifalse(i, i, i + k - 1,1);
}
rep1(i, po + k, n)
{
if (ok[i])
zhitrue(i, i - k + 1, i);
else
zhifalse(i, i - k + 1, i,0);
}
}
}
void init()
{
rep1(i, 1, 26)
{
char t = i + 'A' - 1;
tar[i] = "";
tar[i] += t;
tar[i] = t;
}
rep1(i, 1, 24)
{
char t1 = i + 'A' - 1, t2 = i + 'a' - 1;
tar[i + 26] = "";
tar[i + 26] += t1;
tar[i + 26] += t2;
}
}
void o()
{
rep1(i, 1, n)
{
cout << tar[ans[i]];
if (i == n)
puts("");
else
putchar(' ');
}
}
int main()
{
//freopen("F:\\rush.txt", "r", stdin);
init();
in();
ga();
o();
//printf("\n%.2lf sec \n", (double)clock() / CLOCKS_PER_SEC);
return 0;
}
【codeforces 791C】Bear and Different Names的更多相关文章
- 【32.89%】【codeforces 574D】Bear and Blocks
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【codeforces 791D】 Bear and Tree Jumps
[题目链接]:http://codeforces.com/contest/791/problem/D [题意] 你可以从树上的节点一次最多走k条边. (称为跳一次); 树为无权树; 然后问你任意两点之 ...
- 【codeforces 791B】Bear and Friendship Condition
[题目链接]:http://codeforces.com/contest/791/problem/B [题意] 给你m对朋友关系; 如果x-y是朋友,y-z是朋友 要求x-z也是朋友. 问你所给的图是 ...
- 【codeforces 791A】Bear and Big Brother
[题目链接]:http://codeforces.com/contest/791/problem/A [题意] 给你两个数字a和b; a每次乘3,b每次乘2 问你什么时候a第一次大于b [题解] 傻逼 ...
- 【19.05%】【codeforces 680D】Bear and Tower of Cubes
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【Codeforces 385C】Bear and Prime Numbers
[链接] 我是链接,点我呀:) [题意] f[i]表示在x[]中有多少个数字是i的倍数 让你求出sum(f[i]) li<=i<=ri 且i是质数 [题解] 做筛法求素数的时候顺便把素数i ...
- 【Codeforces 639B】Bear and Forgotten Tree 3
[链接] 我是链接,点我呀:) [题意] [题解] 首先,因为高度是h 所以肯定1下面有连续的h个点依次连成一条链.->用了h+1个点了 然后,考虑d这个约束. 会发现,形成d的这个路径,它一定 ...
- 【Codeforces 639A】Bear and Displayed Friends
[链接] 我是链接,点我呀:) [题意] [题解] 时刻维护一下前K大的数字就好. 因为k<=6 然后数字不会减少只会增加. 因此只要维护一个大小为k的数组就ok. 保证这个数组是有序的. 写个 ...
- 【CodeForces 574B】Bear and Three Musketeers
[链接] 我是链接,点我呀:) [题意] [题解] 枚举每一条边(x,y) 然后再枚举y的出度z 看看g[x][z]是否等于1(表示联通) 如果等于1就说明找到了一个三元环,则尝试用它们的出度和-6更 ...
随机推荐
- ajax的post请求与编码
window.onload = function(){ document.getElementById('username').onblur = function(){ var name = docu ...
- Dcloud课程1 APP的架构有哪些
Dcloud课程1 APP的架构有哪些 一.总结 一句话总结:B/S架构和C/S构架 1.APP的分类? 主流的四大APP系统:1.苹果ios系统版本,开发语言是Objective-C:2.微软Win ...
- js进阶 13-4 jquery自定义动画animate()如何使用
js进阶 13-4 jquery自定义动画animate()如何使用 一.总结 一句话总结:animate(params,[speed],[easing],[fn]),参数:params:一组包含作为 ...
- JS错误记录 - 微博发布
<style> *{ margin: 0; padding: 0;} #ul1{ width: 400px; height: 400px; border: 1px solid #000; ...
- 2.Docker初体验【Docker每天5分钟】
原文:2.Docker初体验[Docker每天5分钟] Docker给PaaS世界带来的“降维打击”,其实是提供了一种非常便利的打包机制.该机制打包了应用运行所需要的整个操作系统,从而保证了本地环境和 ...
- 读文件头数据判断 PE 文件格式和类型
namespace X.Reflection { using System; using System.IO; public static partial class ReflectionX { pu ...
- 算法 Tricks(三)—— 数组(序列)任意区间最小(大)值
序列(数组)的区间通过左右端点确定,这样首先设置一个最值变量用来记录最值,从左端点一步步移动到右端点,自然移动的过程中也可以计算整个区间的和,也即一次线性遍历下来,可同时获得多个有用信息. // 区间 ...
- 【例题3-6 UVA - 1584】Circular Sequence
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 不用真的把每一位都取出来. 用一个后缀的思想. 把原串复制一遍接在后面,然后把每个字符串 都当成一个长度为n的后缀就好了. 比较每个 ...
- [AngularJS NG-redux] Integrate Redux Devtools
In this lesson, we are going to learn how to integrate Redux Devtools into our Angular application. ...
- php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性)
php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性) 一.总结 链表反转两 ...