ゲート

分析:

这题看出来的地方就是这个NAND是左结合的,不适用结合律,交换律。

所以想每次维护答案就不怎么可能了。比赛的时候一开始看成了异或,重读一遍题目了以后就一直去想了怎么维护答案。。。。。。

但是很容易看出来0是置1, 1是取反。于是维护一下最左边以及最右边的0的位置就可以了。要注意一下特殊情况,只有一个0是0,只有一个1是1。

剩下的就是用一个数组模拟栈,细节情况有点多,需要考虑很仔细才能通过。

代码:

/*****************************************************/
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <map>
#include <set>
#include <ctime>
#include <stack>
#include <queue>
#include <cmath>
#include <string>
#include <vector>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <sstream>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
#define offcin ios::sync_with_stdio(false)
#define sigma_size 26
#define lson l,m,v<<1
#define rson m+1,r,v<<1|1
#define slch v<<1
#define srch v<<1|1
#define sgetmid int m = (l+r)>>1
#define LL long long
#define ull unsigned long long
#define mem(x,v) memset(x,v,sizeof(x))
#define lowbit(x) (x&-x)
#define bits(a) __builtin_popcount(a)
#define mk make_pair
#define pb push_back
#define fi first
#define se second const int INF = 0x3f3f3f3f;
const LL INFF = 1e18;
const double pi = acos(-1.0);
const double inf = 1e18;
const double eps = 1e-9;
const LL mod = 1e9+7;
const int maxmat = 10;
const ull BASE = 31; /*****************************************************/ const int maxn = 2e5 + 5;
int a[maxn << 1];
int z[maxn << 1];
int top, bot, topz, botz;
bool flag = true; void Debug() {
if (flag) {
for (int i = top + 1; i <= bot; i ++)
cout<<a[i]<<" ";
puts("");
for (int i = topz + 1; i <= botz; i ++)
cout<<z[i]<<" ";
puts("");
}
else {
for (int i = top - 1; i >= bot; i --)
cout<<a[i]<<" ";
puts("");
for (int i = topz - 1; i >= botz; i --)
cout<<z[i]<<" ";
puts("");
}
} int main(int argc, char const *argv[]) {
int T;
cin>>T;
for (int kase = 1; kase <= T; kase ++) {
int N; scanf("%d", &N);
top = topz = bot = botz = maxn;
mem(a, -1); mem(z, 0);
printf("Case #%d:\n", kase);
for (int i = 0; i < N; i ++) {
char op[10]; scanf("%s", op);
int x;
if (op[0] == 'P' && op[1] == 'U') {
scanf("%d", &x);
if (flag) {
a[top --] = x;
if (!x) z[topz --] = top + 1;
}
else {
a[top ++] = x;
if (!x) z[topz ++] = top - 1;
}
}
else if (op[0] == 'P' && op[1] == 'O') {
if (flag) {
top ++;
if (!a[top]) topz ++;
}
else {
top --;
if (!a[top]) topz --;
}
}
else if (op[0] == 'R') {
top += (flag ? 1 : -1);
topz += (flag ? 1 : -1);
swap(top, bot);
swap(topz, botz);
flag ^= 1;
top += (flag ? -1 : 1);
topz += (flag ? -1 : 1);
}
else {
if (top == bot) {puts("Invalid."); continue; }
else if (topz == botz) {
int num = abs(top - bot);
// cout<<"num1 "<<num<<endl;
printf("%d\n", (num & 1 ? 1 : 0));
continue;
}
else {
int ans = (abs(top - z[botz]) == 1 ? 0 : 1);
// cout<<"nums before 0"<<abs(top - z[botz])<<endl;
int num = abs(z[botz] - bot);
// cout<<"num1 "<<ans<<" "<<num<<endl;
if (num & 1) ans ^= 1;
printf("%d\n", ans);
continue;
}
}
// Debug();
}
}
return 0;
}

hdu 5929 Basic Data Structure的更多相关文章

  1. HDU 5929 Basic Data Structure 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)

    Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  2. HDU 5929 Basic Data Structure 模拟

    Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  3. HDU 5929 Basic Data Structure(模拟 + 乱搞)题解

    题意:给定一种二进制操作nand,为 0 nand 0 = 10 nand 1 = 1 1 nand 0 = 1 1 nand 1 = 0 现在要你模拟一个队列,实现PUSH x 往队头塞入x,POP ...

  4. Basic Data Structure HDU - 5929 (这个模拟我要报警了)

    Mr. Frog learned a basic data structure recently, which is called stack.There are some basic operati ...

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

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

  6. Basic Data Structure

    Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  7. 【推导】【线段树】hdu5929 Basic Data Structure

    题意: 维护一个栈,支持以下操作: 从当前栈顶加入一个0或者1: 从当前栈顶弹掉一个数: 将栈顶指针和栈底指针交换: 询问a[top] nand a[top-1] nand ... nand a[bo ...

  8. HDU 2217 Data Structure?

    C - Data Structure? Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u ...

  9. 2016CCPC东北地区大学生程序设计竞赛1008/HDU 5929 模拟

    Basic Data Structure Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

随机推荐

  1. 20145227&20145201 《信息安全系统设计基础》实验四

    北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名:(按贡献大小排名)鄢曼君 李子璇 学号:(按贡献大小排名)20145227 20145201 成绩: ...

  2. vue.js实现添加删除

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. build.gradle文件介绍

    对于以前用Eclipse开发安卓的小伙伴来说,Gradle文件是陌生的. 不同于Eclipse,而Android Studio 是采用Gradle来构建项目的. 先来介绍最外层目录下的build.gr ...

  4. CSS零基础学习笔记.

    酸菜记 之 CSS的零基础. 这篇是我自己从零基础学习CSS的笔记加理解总结归纳的,如有不对的地方,请留言指教, 学前了解: CSS中字母是不分大小写的; CSS文件可以使用在各种程序文件中(如:PH ...

  5. webpack配置技巧--路径

    resolve: { extensions: ['', '.js', '.vue'], fallback: [path.join(__dirname, '../node_modules')], ali ...

  6. 2016 ACM赛后总结

    已经到6.30号了哎~ 比赛是6.5号的,被推迟了好久的总结现在发吧,因为我怕我再不写就真的会忘掉-- 6.3号晚,星期五,我们一行人乘坐 济南<->徐州 的火车,然后出发了-- 6.4号 ...

  7. Bootstrap 3 Datepicker 使用过程

    最近在创建记录的时候,需要用到日历的功能.本身是使用的bootstrap布局的,所以就找到Datepicker,看了一下用起来还是挺方便的.下面就是使用过程. 依赖的资源 jQuery Moment. ...

  8. 1、启动oracle的步骤

    1.启动oracle的步骤 Linux下启动oracle分为以下两步: 1.1.启动lsnrctl监听. 1.2.启动数据库实例. 2.启动oracle监听 首先登陆服务器,切换到oracle用户. ...

  9. 微信小程序-视图数据绑定

    数据绑定 在逻辑层设置数据例如: Page({ data: { message: 'Hello MINA!' } })//设置了一个属性,名称是message 值为Hello MINA! 在视图显示数 ...

  10. python列表、元祖、字典

    python列表   ['a','1','vs2']       里面的值可以改 python元祖   ('a','1','css','sdf12')   里面的值不能改 python字典   {'s ...