【BZOJ3416】Poi2013 Take-out 栈
【BZOJ3416】Poi2013 Take-out
Description
小F喜欢玩一个消除游戏——take-out
保证k+1|n,保证输入数据有解
这是一个单人游戏 游戏者的目标是消除初始时给定的一列砖块,从左往右标号为1到n,若两个砖块标号相差1,则它们相邻 每一块砖块要么是黑的,要么是白的,这列砖块里面白砖块的数量是黑砖块的数量的k倍 游戏者可以通过执行移除操作来消除砖块 一步移除操作会将k个白砖块和1个黑砖块从序列中移除,而这些被移除的砖块原来所在的位置用透明砖块所代替,其它砖块的位置不变 一个移除操作是合法的当且仅当: 在这次移除中,任意两个被移除的砖块之间,没有透明砖块,且恰好移走k个白砖块和1个黑砖块 显然一个砖块不能被移除两次 小F的智商不够……他对着面前密密麻麻的砖块看傻了眼…… 你能帮他玩通关么?
Input 第一行两个数:n,k,意义同题目描述 接下来一行一个由'b'和'c'组成的字符串,长度为n,描述这列砖块 第i个砖块如果是黑色的,那么第i个字符为'c' 否则是白色的,第i个字符为'b' (注:波兰文中b是bialy的首字母,c是czarny的首字母)
Output 输出n/(k+1)行,每行k+1个数,用空格分开,要求递增 第i行表示第i次移除操作移除砖块的位置集合
HINT 2<=n<=1000000,1<=k<n
Sample Input
ccbcbbbbbbcb
Sample Output
1 8 9
2 6 7
3 4 5
题解:一开始以为贪心的从两边取,然后模拟即可,直到我被一大坨特判击倒~
我们将b看成+1,c看成-k,那么每次移除的区间满足左右端点的前缀和相同。所以用栈来维护这个过程,一旦栈顶k+1个元素和=0,则弹栈。最后倒序输出即可。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
const int maxn=1000010;
int n,m,k,top;
vector<int> p[maxn];
char str[maxn];
int st[maxn];
long long s[maxn];
int main()
{
scanf("%d%d%s",&n,&k,str+1);
int i,j;
for(i=1;i<=n;i++)
{
st[++top]=i,s[top]=s[top-1];
if(str[i]=='b') s[top]++;
else s[top]-=k;
if(top>=k+1&&s[top-k-1]==s[top]) for(m++,j=0;j<=k;j++) p[m].push_back(st[top--]);
}
for(i=m;i>=1;i--)
{
for(j=k;j>=0;j--) printf("%d ",p[i][j]);
printf("\n");
}
}
【BZOJ3416】Poi2013 Take-out 栈的更多相关文章
- POI2013题解
POI2013题解 只做了BZ上有的\(13\)道题. 就这样还扔了两道神仙构造和一道计算几何题.所以只剩下十道题了. [BZOJ3414][Poi2013]Inspector 肯定是先二分答案,然后 ...
- [POI2013]Usuwanka
[POI2013]Usuwanka 题目大意: 一排\(n\)个球,有黑白两种颜色.每取走一个球会在原位置放一个水晶球.求构造一种取球方案,满足: 每次取走\(k\)个白球和\(1\)个黑球: 一次取 ...
- 通往全栈工程师的捷径 —— react
腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...
- Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)
--reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有 ...
- duang~免费的学习视频来啦:学霸君之全栈测试
学霸君向童鞋们推荐一款 同名学霸学习 视频教程 重点是完全免费收看学习噢!!! 今天 学霸君推荐腾讯课堂的学霸君之全栈测试 复制下方链接至腾讯课堂中报名学习 https://ke.qq.com/cou ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...
- BZOJ 4453: cys就是要拿英魂![后缀数组 ST表 单调栈类似物]
4453: cys就是要拿英魂! Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 90 Solved: 46[Submit][Status][Discu ...
- BZOJ 3238: [Ahoi2013]差异 [后缀数组 单调栈]
3238: [Ahoi2013]差异 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2326 Solved: 1054[Submit][Status ...
随机推荐
- memcached+Mysql(主从)
昨天和守住看了下http://hi.baidu.com/156544632/blog/item/3b26527b68623ff00bd18746.html这篇文章,思路很好,但感觉就是太乱了,而且还出 ...
- 简单实例,说明自动生成Makefile的详细过程
为了编译一个简单的源文件main.c,需要自动生成一个makefile,以下是步骤: 第一步:----------在/root/project/main目录下创建一个文件main.c,其内容如下:-- ...
- atitit.词法分析的实现token attilax总结
atitit.词法分析的实现token attilax总结 1. 词法分析(英语:lexical analysis)跟token 1 1.1. 扫描器 2 2. 单词流必须识别为保留字,标识符(变量) ...
- maven 中使用jstl 错误解决
maven 中使用jstl表达式中出现如上错误.原因: 导入jstl 的jar包,却没有在pom文件中添加jstl相关的jar依赖项. <!--jstl表达式--> <depende ...
- 逃生dp
蒜头君在玩一款逃生的游戏.在一个 n \times mn×m的矩形地图上,蒜头位于其中一个点.地图上每个格子有加血的药剂,和掉血的火焰,药剂的药效不同,火焰的大小也不同,每个格子上有一个数字,如果格子 ...
- 转载:vim的复制,删除,粘贴,块操作以及快速替换功能
掌握如下命令有什么好办法,我可以告诉你唯手熟尔!!多看多练对于VIM而言,复制,删除,粘贴的操作应该是非常多的.这次也做一个总结,关于处理VIM下的复制,删除,粘贴等操作.学会使用帮助文件,命令的帮助 ...
- Xml解析之PULL解析 例1
<?xml version="1.0" encoding="UTF-8"?> <persons> <person id=" ...
- UCOS2_STM32移植详细过程(汇总)
Ⅰ.概述 笔者发现一个问题,很多初学者,甚至很多工作一两年的人,他们有一种依赖的思想,就是希望从别处获取的软件代码不做任何修改,直接可以运行或者使用.笔者想说,实践才是检验真理的关键,实践才是掌握知识 ...
- udp program
UDP program UDP常用函数:recvfrom和sendto recvfrom ssize_t recvfrom(int sockfd, void *buf, size_t len, int ...
- asp.net 正在加载效果实现
最近研究了下asp.net 正在加载的实现原理,总结了以下实现方法 首先,我们有个div显示内容为正在加载.. 当然也可以考虑用图片或者其他的,不过考虑到速度,建议直接文字提示就行,然后设置div ...