HDU 5929 Basic Data Structure(模拟 + 乱搞)题解
2024-08-26 23:31:07
题意:给定一种二进制操作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 ;
}
最新文章
- HTML渲染过程详解
- 我的MYSQL学习心得(七) 查询
- Android集成支付宝的坑
- Notice: Undefined offset 的解决方法
- Android 风格化的 Toggle Buttons
- Mininet 搭建自定义网络
- les nationalit&#233;s et les pays
- windows安装MySQL
- dedecsm系统(企业简介)类单栏目模版如何修改和调用整理
- JVM笔记4-对象的创建
- [PHP] assert()断言检测函数
- [OC] @property时,copy、strong、weak、assign的区别
- Flux architecture
- 漫画 | Java多线程与并发(一)
- 阿里春招Android面经
- c++输出保留固定小数位数
- java 通过ip获取客户端mac地址
- ABP中连接已有数据库执行Sql或存储过程
- android开源项目之OTTO事件总线(二)官方demo解说
- python并发进程
热门文章
- Python之装饰器的实例
- SolidWorks242个使用技巧
- form的action属性值对应servlet的web.xml的url-pattern
- 【2017-03-02】C#集合,结构体,枚举
- vue中组件通信之父子通信:props(组件传参)
- AURO OtoSys IM100 vs Lonsdor K518ISE: which better?
- scala语言中的case关键字在spark中的一个奇特使用
- mycat工作原理
- shell expr match
- How to click on a point on an HTML5 canvas in Python selenium webdriver