题意:给定一种二进制操作nand,为

0 nand 0 = 1
0 nand 1 = 1 
1 nand 0 = 1 
1 nand 1 = 0

现在要你模拟一个队列,实现PUSH x 往队头塞入x,POP队尾退出,REVERSE翻转,QUERY询问队头到队尾的nand和。

思路:其他都可以模拟,但是n为2e5,如果直接求nand和必超时,找规律可得,任何串和0nand都为1,那么我们维护一个双端队列保存0出现的位置,然后每次就计算离队尾最近的0和队尾间有几个1。

代码:

#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
typedef long long ll;
using namespace std;
const int maxn = + ;
const int seed = ;
const ll MOD = ;
const int INF = 0x3f3f3f3f;
deque<int> q; //
int main(){
int t, x, l, r, ca = , cnt;
char order[];
scanf("%d", &t);
while(t--){
printf("Case #%d:\n", ca++);
int n;
int turn = ;
cnt = ;
l = , r = -;
while(!q.empty()) q.pop_back();
scanf("%d", &n);
while(n--){
scanf("%s", order);
if(order[] == 'S'){ //push
scanf("%d", &x);
if(turn){
cnt++;
r++;
if(x == ) q.push_back(r);
}
else{
cnt++;
l--;
if(x == ) q.push_front(l);
}
}
else if(order[] == 'P'){ //pop
if(turn){
if(!q.empty() && q.back() == r) q.pop_back();
r--;
}
else{
if(!q.empty() && q.front() == l) q.pop_front();
l++;
}
cnt--;
}
else if(order[] == 'V'){ //reverse
turn ^= ;
}
else{ //query
int ans;
if(cnt == ) printf("Invalid.\n");
else{
if(q.empty()) ans = (r - l + ) % ;
else{
if(turn)
ans = (q.front() - l + - (q.front() == r)) % ;
else
ans = (r - q.back() + - (q.back() == l)) % ;
}
printf("%d\n", ans);
}
}
}
}
return ;
}

最新文章

  1. HTML渲染过程详解
  2. 我的MYSQL学习心得(七) 查询
  3. Android集成支付宝的坑
  4. Notice: Undefined offset 的解决方法
  5. Android 风格化的 Toggle Buttons
  6. Mininet 搭建自定义网络
  7. les nationalit&#233;s et les pays
  8. windows安装MySQL
  9. dedecsm系统(企业简介)类单栏目模版如何修改和调用整理
  10. JVM笔记4-对象的创建
  11. [PHP] assert()断言检测函数
  12. [OC] @property时,copy、strong、weak、assign的区别
  13. Flux architecture
  14. 漫画 | Java多线程与并发(一)
  15. 阿里春招Android面经
  16. c++输出保留固定小数位数
  17. java 通过ip获取客户端mac地址
  18. ABP中连接已有数据库执行Sql或存储过程
  19. android开源项目之OTTO事件总线(二)官方demo解说
  20. python并发进程

热门文章

  1. Python之装饰器的实例
  2. SolidWorks242个使用技巧
  3. form的action属性值对应servlet的web.xml的url-pattern
  4. 【2017-03-02】C#集合,结构体,枚举
  5. vue中组件通信之父子通信:props(组件传参)
  6. AURO OtoSys IM100 vs Lonsdor K518ISE: which better?
  7. scala语言中的case关键字在spark中的一个奇特使用
  8. mycat工作原理
  9. shell expr match
  10. How to click on a point on an HTML5 canvas in Python selenium webdriver