hdu 5929 Basic Data Structure
分析:
这题看出来的地方就是这个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的更多相关文章
- HDU 5929 Basic Data Structure 【模拟】 (2016CCPC东北地区大学生程序设计竞赛)
Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- HDU 5929 Basic Data Structure 模拟
Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- 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 ...
- Basic Data Structure HDU - 5929 (这个模拟我要报警了)
Mr. Frog learned a basic data structure recently, which is called stack.There are some basic operati ...
- hdu-5929 Basic Data Structure(双端队列+模拟)
题目链接: Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Ja ...
- Basic Data Structure
Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- 【推导】【线段树】hdu5929 Basic Data Structure
题意: 维护一个栈,支持以下操作: 从当前栈顶加入一个0或者1: 从当前栈顶弹掉一个数: 将栈顶指针和栈底指针交换: 询问a[top] nand a[top-1] nand ... nand a[bo ...
- HDU 2217 Data Structure?
C - Data Structure? Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u ...
- 2016CCPC东北地区大学生程序设计竞赛1008/HDU 5929 模拟
Basic Data Structure Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
随机推荐
- Comparable和Comparator的区别
Comparable Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较 ...
- 【转】不容忽视的ClassNotFoundException
转载地址:http://it.deepinmind.com/jvm/2014/04/11/classnotfoundexception-is-it-slowing-down-your-jvm.html ...
- Android的学习第六章(布局二--RelativeLayout)
今天我们来说一下Android布局中的Relativelayout布局(相对布局) 根据英译过来意思是相对布局,很容易理解,这一样布局使用的是元素与元素之间的微调做到布局的 含义:通过元素与元素之间的 ...
- 压测session优化
每请求一次jsp页面,会产生一个session对象,并且这个对象30分钟后才过期.我们计算了下当时的QPS是5000,也就是说每秒钟产生5000个session对象.每分钟产生300K个对象,sess ...
- 深入.NET平台C#编程 测试题分析
选择题讲解 1) 以下关于序列化和反序列化的描述错误的是( C). a) 序列化是将对象的状态存储到特定存储介质中的过程 b) 二进制格式化器的Serialize()和Deserialize()方法可 ...
- angularjs $broadcast 和 $on 的使用及其注意事项
下面是demo: <div ng-controller="ParentCtrl"> www.111cn.net //父级 <div ng-controller=& ...
- cmp函数
cmp(x,y),既可以比较数字大小,也可以比较字符串.如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1. 数字的比较 >>> ...
- [转]Part2: Understanding !PTE, Part2: Flags and Large Pages
http://blogs.msdn.com/b/ntdebugging/archive/2010/04/14/understanding-pte-part2-flags-and-large-pages ...
- System Setup
vistual studio 2013 download: http://www.microsoft.com/en-us/download/details.aspx?id=48138 http://w ...
- strom的使用01
1.strom的安装和测试 1.1 搭建zookeeper集群 参考hadoop2.0初识1.3中的1.4配置zookeeper集群和自动故障转移 1.2 安装storm依赖的软件 sudo yum ...