ゲート

分析:

这题看出来的地方就是这个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. php大小写转换

    1.将字符串转换成小写   strtolower();: 该函数将传入的字符串参数所有的字符都转换成小写,并以小定形式放回这个字符串.例: <?php $str = "I want T ...

  2. Thinkphp回顾之(四)查询方法深入学习

    本次讲的查询方法主要有:表达式查询,模糊查询,between语句,in语句,区间查询,统计数据,普通方式查询,但大多数都只是引入数组而已,明白了第一个,其他的也就差不多全明白了,唯一要注意的是在后台中 ...

  3. github在liunx上的搭建

    清屏:ctrl+l 1 在linux下安装git yum -y install git 查看版本 git --version 4 设置git的用户名和邮箱地址 git config --global ...

  4. 数据库中的左连接(left join)和右连接(right join)区别

    Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接where只影向右表,右连接where只影响左表. Left Join select ...

  5. jQuery学习笔记(二)jQuery中DOM操作

    目录 DOM操作分类 jQuery中的各种DOM操作 查找节点 创建节点 删除节点 复制节点 替换节点 包裹节点 属性操作 样式操作 对HTML.文本和值的操作 遍历节点 CSS-DOM操作 小结 本 ...

  6. RStudio中,出现中文乱码问题的解决方案

    RStudio中,出现中文乱码问题的解决方案解决步骤:1.设置RStudio文本显示的默认编码:RStudio菜单栏的Tools -> Global Options2.选择General -&g ...

  7. 闲的写写SQL

    /* 新增 */ Create Proc AddData ( ), ), @Values nvarchar(max) ) as declare @Sql nvarchar(max) declare @ ...

  8. 关于APP程序员泡沫经济

    这些年,移动互联网非常火,火到掀起学习iOS.安卓以及H5的热潮.有人将这些新技术作为自己的实力补充,增加竞争力:更多的人将它们作为主业,专职做移动开发.但是,即便有移动开发人员不断涌入,对整个行业来 ...

  9. em详解

    最近详细阅读了一下CSS2.2文档,对em单位有了深刻的认识 原文在此:The 'em' unit is equal to the computed value of the 'font-size'  ...

  10. 数据库:django ORM如何处理N+1查询

    数据库N+1查询是个常见的问题,简单描述场景如下 基本场景 class Category(models.Model): name = models.CharField(max_length=30) c ...