ゲート

分析:

这题看出来的地方就是这个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. 结合Apache和Tomcat实现集群和负载均衡 JK 方式 2 (转)

    本文Apache+Tomcat集群配置       基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apa ...

  2. ThinkPHP之登录验证

    验证方面写的不是很完整,正在完善当中 <?php /** * Created by dreamcms. * User: Administrator * Date: 2016/9/5 * Time ...

  3. webstorm2016.2 for mac 安装

    文件来自斯蒂芬周: http://www.sdifenzhou.com/?p=6941&jdfwkey=jmnzy 附上详细安装步骤:

  4. Android first---SQLite

    SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHelper 必须定义一个构造方法: public MyOpenHelper(Context context, ...

  5. jQuery事件总结

    blur() 触发或绑定blur事件.$("input").blur(function(){ $("input").css("background-c ...

  6. 简单播放器(增加sdl事件控制)

    #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscal ...

  7. What is the difference between routine , method , procedure , function ? please explain it with example?

    a method is named and attached to an object. so, for example, a method is like a function but is con ...

  8. asp.net天网代码

    自己整理的asp.net中国天气网的城市代码 完整下载 case "北京": Code = "101010100"; break; case "海淀& ...

  9. java subList方法小记

    在java中,我们有时候需要对一个list进行拆分处理,这个时候就需要用到list的切割方法subList. 我们知道list里面的序号起始是从0开始的,所以一个含有23条数据的list,它的序号是从 ...

  10. logback 配置详解(一)——logger、root

    1.根节点<configuration>包含的属性 scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文件 ...