有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 ;
}

最新文章

  1. MVC中权限管理
  2. CSS 定位机制 position
  3. dhcp原理、安装、相关命令、疑惑
  4. 磁盘与目录的容量[转自vbird]
  5. vmware通过vmnet8共享本地网络
  6. Windows Socket 最大连接数
  7. POJ2513——Colored Sticks(Trie树+欧拉回路+并查集)
  8. oracle 创建表空间、创建用户管理该表空间
  9. QT字体的设置
  10. 一步一步重写 CodeIgniter 框架 (11) —— 使用 CodeIgniter 函数库
  11. Socket开发时,Available为0,实际还有数据的问题
  12. jq之简单的表单验证
  13. 集美大学网络1413第七次作业成绩(团队三) --需求改进&amp;系统设计
  14. python3学习笔记3---引用http://python3-cookbook.readthedocs.io/zh_CN/latest/
  15. 搭建vsf
  16. How do I remove a particular element from an array in JavaScript?
  17. H5开发:横屏适配
  18. 集合总结一(ArrayList的实现原理)
  19. SNP (Single Nucleotide Polymorphism), SNV ( single nucleotide variants ) , Indel (insertion-deletion) 的区别
  20. [Converge] Training Neural Networks

热门文章

  1. 修改 CentOS 中的 repo
  2. 0基础自学php教程
  3. HDOJ5875(线段树)
  4. js正则验证
  5. java代码---------打印正三角形
  6. PS1 长命令回到行首进行覆盖
  7. 准确计算Java中对象的大小
  8. PHP环境基础配置
  9. Oracle参数修改是否需要重启等
  10. Sqlmap用法小结