【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 ...
随机推荐
- Nginx 安装与启动
安装 第一种安装方式:CentOS 7下配置 yum 安装 Nginx. 按照官方的安装实例:https://www.nginx.com/resources/admin-guide/ 第一步,在/et ...
- 字符串函数---itoa()函数具体解释及实现
itoa()函数 itoa():char *itoa( int value, char *string,int radix); 原型说明: value:欲转换的数据. string:目标字符串的地址. ...
- atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结
atitit.D&D drag&drop拖拽文件到界面功能 html5 web 跟个java swing c#.net c++ 的总结 1. DND的操作流程 1 2. Html5 注 ...
- 【Android】16.0 第16章 自定义服务和系统服务—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-03-01 一.简介 本章主要演示Started Service.带Intent过滤器的Started Service.IntentSe ...
- [转]软件测试 Top 120 Blog (博客)
[转]软件测试 Top 120 Blog (博客) 2015-06-08 转自: 软件测试 Top 120 Blog (博客) # Site Author Memo DevelopSense M ...
- Qt打开文件对话框
项目中需要打开文件对话框,就查了一下,不得不说Qt的帮助文档做的真好,非常详细.要实现这个功能有两种方式,使用QFileDialog的静态方法,实例化QFileDialog对象. 基本算是照抄帮助文档 ...
- SAP ECC6安装系列一:安装前硬件和软件准备
原作者博客 http://www.cnblogs.com/Michael_z/ ======================================== 写在前面的罗嗦话 一晃就是5年,前几天 ...
- JS学习笔记(2)--正则表达式获取指定字符串
js 正则提取字串 这里就有:SA 怎么用正则提取sa出来 var str=“这里就有:SA ”怎么用正则提取sa出来 YDhcui | 浏览 2087 次 推荐于2016-05-30 18:25:4 ...
- 基于HTML5堆木头游戏
今天要来分享一款很经典的HTML5游戏——堆木头游戏,这款游戏的玩法是将木头堆积起来,多出的部分将被切除,直到下一根木头无法堆放为止.这款HTML5游戏的难点在于待堆放的木头是移动的,因此需要你很好的 ...
- C语言 · 排列数
算法提高 排列数 时间限制:1.0s 内存限制:256.0MB 问题描述 0.1.2三个数字的全排列有六种,按照字母序排列如下: 012.021.102.120.201.210 输入 ...