book pile SGU - 271
有n本书从上到下摞在一起,有两种操作。ADD(C)表示把一本新书C放到这一摞书的最顶上,ROTATE表示将前K本书进行反转。在一系列操作后输出最后书的顺序
分析:
当时听别人讲这个题的时候很懵逼,后来自己读了一下题发现K是个固定的值,这样就好解决了
每次反转操作只是针对于顶上的K个进行。
我们可以用一个两个双端队列解决
第一个双端队列储存前K本书,第二个双端队列(也可以是别的栈或者普通队列什么的因为不会再进行反转了)储存剩下的书。
对于每个反转操作,只需要将双端队列的头和尾交换一下(并不是真的交换,用一个标记记录一下就可以了)
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <map>
#include <queue> using namespace std;
const int maxn=+;
string Name[maxn];
deque<int>q1,q2;
int front1,front2;//1正常0交换
int n,m,k;
int main(){
scanf("%d%d%d",&n,&m,&k);
string s;
for(int i=;i<=n;i++){
cin>>s;
Name[i]=s;
q1.push_back(i);
}
front1=front2=;
for(int i=;i<=n-k;i++){
q2.push_front(q1.back());
q1.pop_back();
}
for(int i=;i<=m;i++){
cin>>s;
if(s=="ROTATE")front1=!front1;
else{
string NAME;
bool judge=;
for(int j=;j<s.length();j++){
if(s[j]=='('){judge=;continue;}
if(s[j]==')'){judge=;break;}
if(judge)NAME+=s[j];
}
++n;
Name[n]=NAME;
if(front1){
q1.push_front(n);
if(q1.size()>k){
q2.push_front(q1.back());
q1.pop_back();
}
}else{
q1.push_back(n);
if(q1.size()>k){
q2.push_front(q1.front());
q1.pop_front();
}
} }
}
while(!q1.empty()){
int u;
if(front1){
u=q1.front();q1.pop_front();
}
else{
u=q1.back();q1.pop_back();
}
cout<<Name[u]<<endl;
}
while(!q2.empty()){
int u=q2.front();q2.pop_front();
cout<<Name[u]<<endl;
}
return ;
}
book pile SGU - 271的更多相关文章
- SGU 271 Book Pile
There is a pile of N books on the table. Two types of operations are performed over this pile: - a b ...
- SGU 271 Book Pile (双端队列)
题意:n,m,k,表示有一个长度为 n 的序列,有 m 个操作,操作有 2 种,第一种是 ADD 在前面添加一个串,第二种是把前 k 个进行翻转,问你最后的序列是什么样的. 析:很明显,如果直接模拟, ...
- codeforces#271 (Div. 2)预处理
B. Worms time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- SGU 495. Kids and Prizes
水概率....SGU里难得的水题.... 495. Kids and Prizes Time limit per test: 0.5 second(s)Memory limit: 262144 kil ...
- ACM: SGU 101 Domino- 欧拉回路-并查集
sgu 101 - Domino Time Limit:250MS Memory Limit:4096KB 64bit IO Format:%I64d & %I64u Desc ...
- 【SGU】495. Kids and Prizes
http://acm.sgu.ru/problem.php?contest=0&problem=495 题意:N个箱子M个人,初始N个箱子都有一个礼物,M个人依次等概率取一个箱子,如果有礼物则 ...
- SGU 455 Sequence analysis(Cycle detection,floyd判圈算法)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=455 Due to the slow 'mod' and 'div' operati ...
- Codeforces Round #271 (Div. 2)题解【ABCDEF】
Codeforces Round #271 (Div. 2) A - Keyboard 题意 给你一个字符串,问你这个字符串在键盘的位置往左边挪一位,或者往右边挪一位字符,这个字符串是什么样子 题解 ...
- SGU 422 Fast Typing(概率DP)
题目大意 某人在打字机上打一个字符串,给出了他打每个字符出错的概率 q[i]. 打一个字符需要单位1的时间,删除一个字符也需要单位1的时间.在任意时刻,他可以花 t 的时间检查整个打出来的字符串,并且 ...
随机推荐
- java 二维码生成(vcard)
1. maven 依赖 <dependency> <groupId>com.googlecode.ez-vcard</groupId> <artifactId ...
- rundll32命令大全
rundll32命令大全 命令列:rundll32.exe user.exe,restartwindows 功能: 系统重启 命令列:rundll32.exe user.exe,exitwindows ...
- SSH远程登录CentOS服务器
1.把ssh默认远程连接端口修改为2200编辑防火墙配置:vi /etc/sysconfig/iptables防火墙增加新端口2222 -A INPUT -m state --state NEW -m ...
- sed命令n,N,d,D,p,P,h,H,g,G,x解析
1.sed执行模板=sed '模式{命令1;命令2}'即逐行读入模式空间,执行命令,最后输出打印出来2.为方便下面,先说下p和P,p打印当前模式空间内容,追加到默认输出之后,P打印当前模式空间开端至\ ...
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料汇总 (上)
转载:http://dataunion.org/8463.html?utm_source=tuicool&utm_medium=referral <Brief History of Ma ...
- java代码-------多线程实例
总结:我真的发现输出数字,没觉得线程有什么特别的,不过在项目中用的很多,无论是游戏,还是其他 可以控制物体移动的速度 package com.a.b; class MyThread extends T ...
- JAVA代码实现从文件写入东西后有读出来=========FileInputStream
总结: 这个原理是,先把for循环里的数从程序读到文件里,然后把文件把内容读到程序里 package com.a.b; import java.io.FileInputStream; import j ...
- git clone 后使用子分支
git clone 项目git地址 git branch -a 切换到子分支进行开发 git ckeckout 子分支名称,如:git checkout dev_feature_call git pu ...
- kotlin学习三:初步认识kotlin(第二篇)
上一章熟悉了kotlin基本的变量和函数声明,并明白了如何调用函数.本章再来看一些其他有用的东西 包括: 1. kotlin代码组织结构 2. when语法 3. 循环迭代语法 4. try表达式 1 ...
- Julia - 算术基本函数
符号函数和绝对值函数 abs(x) 函数求 x 的绝对值(幅值) julia> abs(3) 3 julia> abs(-3) 3 abs2(x) 函数求 x 的绝对值(幅值)的平方 ju ...