题意:n,m,k,表示有一个长度为 n 的序列,有 m 个操作,操作有 2 种,第一种是 ADD 在前面添加一个串,第二种是把前 k 个进行翻转,问你最后的序列是什么样的。

析:很明显,如果直接模拟,肯定会超时,由于 k 是固定的,我们就可以前 k 个串,如果没有翻转,那么就把添加的串方法直接放到双端队列前面,然后把双端队列后面那个串再拿出去,如果翻转了,就把添加的串方法直接放到双端队列后面,然后把双端队列前面那个串再拿出去。

代码如下:

  1. #pragma comment(linker, "/STACK:1024000000,1024000000")
  2. #include <cstdio>
  3. #include <string>
  4. #include <cstdlib>
  5. #include <cmath>
  6. #include <iostream>
  7. #include <cstring>
  8. #include <set>
  9. #include <queue>
  10. #include <algorithm>
  11. #include <vector>
  12. #include <map>
  13. #include <cctype>
  14. #include <cmath>
  15. #include <stack>
  16. #include <sstream>
  17. #include <list>
  18. #include <assert.h>
  19. #include <bitset>
  20. #include <numeric>
  21. #define debug() puts("++++")
  22. #define gcd(a, b) __gcd(a, b)
  23. #define lson l,m,rt<<1
  24. #define rson m+1,r,rt<<1|1
  25. #define fi first
  26. #define se second
  27. #define pb push_back
  28. #define sqr(x) ((x)*(x))
  29. #define ms(a,b) memset(a, b, sizeof a)
  30. #define sz size()
  31. #define be begin()
  32. #define ed end()
  33. #define pu push_up
  34. #define pd push_down
  35. #define cl clear()
  36. #define lowbit(x) -x&x
  37. //#define all 1,n,1
  38. #define FOR(i,n,x) for(int i = (x); i < (n); ++i)
  39. #define freopenr freopen("in.in", "r", stdin)
  40. #define freopenw freopen("out.out", "w", stdout)
  41. using namespace std;
  42.  
  43. typedef long long LL;
  44. typedef unsigned long long ULL;
  45. typedef pair<int, int> P;
  46. const int INF = 0x3f3f3f3f;
  47. const LL LNF = 1e17;
  48. const double inf = 1e20;
  49. const double PI = acos(-1.0);
  50. const double eps = 1e-8;
  51. const int maxn = 1e5 + 10;
  52. const int maxm = 1e6 + 10;
  53. const LL mod = 1000000007;
  54. const int dr[] = {-1, 1, 0, 0, 1, 1, -1, -1};
  55. const int dc[] = {0, 0, 1, -1, 1, -1, 1, -1};
  56. const char *de[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
  57. int n, m;
  58. const int mon[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  59. const int monn[] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  60. inline bool is_in(int r, int c) {
  61. return r >= 0 && r < n && c >= 0 && c < m;
  62. }
  63. inline int readInt(){ int x; scanf("%d", &x); return x; }
  64.  
  65. vector<string> v;
  66. stack<string> st;
  67. deque<string> q;
  68.  
  69. int main(){
  70. int k;
  71. scanf("%d %d %d", &n, &m, &k);
  72. char s[30];
  73. int cnt = 0;
  74. for(int i = 0; i < n; ++i){
  75. scanf("%s", s);
  76. if(q.sz < k) q.push_back(s);
  77. else v.pb(s);
  78. }
  79. char t[30];
  80. while(m--){
  81. scanf("%s", t);
  82. if(t[0] == 'R') cnt ^= 1;
  83. else {
  84. t[strlen(t)-1] = 0;
  85. char *s = t + 4;
  86. if(cnt == 0){
  87. q.push_front(s);
  88. if(q.sz > k){
  89. st.push(q.back()); q.pop_back();
  90. }
  91. }
  92. else{
  93. q.push_back(s);
  94. if(q.sz > k){
  95. st.push(q.front()); q.pop_front();
  96. }
  97. }
  98. }
  99. }
  100.  
  101. if(cnt) while(!q.empty()){ printf("%s\n", q.back().c_str()); q.pop_back(); }
  102. else while(!q.empty()){ printf("%s\n", q.front().c_str()); q.pop_front(); }
  103. while(!st.empty()){ printf("%s\n", st.top().c_str()); st.pop(); }
  104. for(int i = 0; i < v.sz; ++i) printf("%s\n", v[i].c_str());
  105. return 0;
  106. }

  

SGU 271 Book Pile (双端队列)的更多相关文章

  1. SGU 321 知道了双端队列,

    思路: 贪心. 每次删除最上面的边.. #include<utility> #include<iostream> #include<vector> #include ...

  2. 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 ...

  3. lintcode二叉树的锯齿形层次遍历 (双端队列)

    题目链接: http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/ 二叉树的锯齿形层次遍历 给出 ...

  4. lintcode 滑动窗口的最大值(双端队列)

    题目链接:http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑动窗口的最大值 给出一个可能包含重复的整数数组,和一个大小为  ...

  5. STL---deque(双端队列)

    Deque是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结 ...

  6. hdu-5929 Basic Data Structure(双端队列+模拟)

    题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

  7. HDU 4286 Data Handler --双端队列

    题意:有一串数字,两个指针,然后一些添加,删除,反转,以及移动操作,最后输出序列. 解法:可以splay做,但是其实双端队列更简便. 维护三个双端队列LE,MI,RI分别表示[L,R]序列左边,[L, ...

  8. 双端队列(单调队列)poj2823 区间最小值(RMQ也可以)

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 41844   Accepted: 12384 ...

  9. Java 集合深入理解(10):Deque 双端队列

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 什么是 Deque Deque 是 Double ended queue (双端队列) 的缩写,读音和 deck 一样,蛋 ...

随机推荐

  1. solr简介、学习详细过程!(超详细~)

    solr是什么呢? 一.Solr它是一种开放源码的.基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中. 二.Solr 提供了层面搜索(就是统计).命中醒目显示并且支持多种输出 ...

  2. 运行msckf_vio

     MSCKF_vio是一种基于多状态约束卡尔曼滤波器的双目视觉里程计.其中多状态约束是指将多帧图像的相机位姿加入卡尔曼状态向量中,在进行卡尔曼增益之前通过多帧图像之间的约束进行最小二乘优化来估计特征点 ...

  3. thinkphp3.2集成QRcode生成二维码

    一.下载QRcode源代码 https://sourceforge.net/projects/phpqrcode/files/releases/ 使用phpqrcode必须开启GD2扩展,phpqrc ...

  4. bootstrap 折叠collapse失效

    手动点击折叠,然后调用折叠全部以后,在手动点击折叠项,折叠失效. 方法,折叠项是通过添加或删除".in"来实现,实现如下 $(".collapse.in").c ...

  5. IIS站点报拒绝访问Temporary ASP.NET Files的解决办法

    IIS站点本来运行的好好的,突然就出现了:Temporary ASP.NET Files拒绝访问的问题.遇到此类问题,请逐步排查,定可解决. 原因:Windows操作系统升级导致. 办法: 1.检查C ...

  6. jquery Jquery 遍历 获取设置 效果

    speed: slow fast 毫秒 隐藏 显示 $(selector).hide(speed,callback) 隐藏. $(selector).show(speed,callback) 显示 $ ...

  7. python 验证码 和进度条

    import random def make_code(n): res='' for i in range(n): s1=chr(random.randint(65,90)) s2=str(rando ...

  8. Jenkins构建.net项目

    一.环境搭建 1.安装所需软件 Jenkins\JDK\GIT\VS\IIS\nginx(可选) 1.1 安装iis服务: 控制面板—>程序和功能—>启用或关闭windows功能,勾选所有 ...

  9. angular2.0学习笔记5.关于组件

    1.组件文件应在/src/app文件夹下 2.组件文件命名应遵循小写中线形式,每个单词之间用中线分隔,并且以.component.ts结尾. 如:HeroDetailComponent类应该放在her ...

  10. Openflow的架构+源码剖析 转载

    Openvswitch的架构网上有如下的图表示: Openvswitch原理与代码分析(1):总体架构 Openvswitch原理与代码分析(2): ovs-vswitchd的启动 Openvswit ...