题目大意:维护两个栈,几个操作:

  1. $PUSH\;x\;num:$把$num$压入栈$x$
  2. $POP\;x:$弹出栈$x$栈顶元素
  3. $ADD\;x:$取出两个栈栈顶,把相加值压入栈$x$
  4. $SUB\;x:$取出两个栈栈顶,把相减的绝对值压入栈$x$
  5. $DEL\;x:$清空栈$x$
  6. $MOVE\;x\;y:$把$y$中的元素一个个弹出,依次压入栈$x$
  7. $SWAP:$交换两个栈
  8. $END:$结束

题解:可以平衡树搞,但是也可以用双向链表。两个双向链表,除了第$6$个,其他都是基本操作。第$6$个操作时,就把$y$的栈顶与$x$的栈顶接起来,把$x$的栈顶设为$y$的栈底就行了

卡点:莫名$RE$了很多次(包括后面$WA$的),开大数组后通过(我也不知道为什么,中间尝试查错,没有成功)

C++ Code:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#define maxn 7000010
#define TANG_Yx 20040826
struct node {
long long w;
int nxt[2];
inline int find(int pos = TANG_Yx) {
if (pos == TANG_Yx) {for (int i = 0; i < 2; i++) if (nxt[i] != 0) return nxt[i];}
else for (int i = 0; i < 2; i++) if (nxt[i] == pos) return nxt[i];
return TANG_Yx;
}
inline int find_pos(int pos = TANG_Yx) {
if (pos == TANG_Yx) {for (int i = 0; i < 2; i++) if (nxt[i] != 0) return i;}
else for (int i = 0; i < 2; i++) if (nxt[i] == pos) return i;
return TANG_Yx;
}
inline void clear_nxt(int pos) {
int __pos = find_pos(pos);
if (__pos != TANG_Yx) nxt[__pos] = 0;
}
}; node S[maxn << 1];
struct Stack {
int begin, end, idx, sz = 0;
inline Stack(int __idx = 0) {
begin = end = 0;
idx = __idx;
sz = 0;
}
inline bool empty() {return sz < 1;}
inline void clear() {
begin = end = 0;
sz = 0;
}
inline long long top() {
if (empty()) return TANG_Yx;
return S[begin].w;
}
inline int pop() {
if (empty()) return TANG_Yx;
int __begin = S[begin].find();
sz--;
if (sz) {
S[__begin].clear_nxt(begin);
begin = __begin;
} else begin = 0;
return sz;
}
inline void push(long long num) {
int __begin = ++idx;
S[__begin].w = num;
S[__begin].nxt[0] = begin;
S[__begin].nxt[1] = 0;
int __nxt = S[begin].find_pos(0);
S[begin].nxt[__nxt] = __begin;
begin = __begin;
if (!sz) end = __begin;
sz++;
}
} sta[2];
inline long long abs(long long a) {return a < 0 ? -a : a;} int opt = 0, result;
int main() {
sta[0] = Stack();
sta[1] = Stack(maxn);
while (true) {
char op[10];
int x; long long y;
scanf("%s", op);
if (strcmp(op, "PUSH") == 0) {
scanf("%d%lld", &x, &y);
sta[x ^ opt].push(y);
}
if (strcmp(op, "POP") == 0) {
scanf("%d", &x);
result = sta[x ^ opt].pop();
if (result == TANG_Yx) printf("UN");
}
if (strcmp(op, "ADD") == 0) {
scanf("%d", &x);
long long l = sta[0].top(), r = sta[1].top();
if (l != TANG_Yx && r != TANG_Yx) {
sta[0].pop(), sta[1].pop();
sta[x ^ opt].push(l + r);
} else printf("UN");
}
if (strcmp(op, "SUB") == 0) {
scanf("%d", &x);
long long l = sta[0].top(), r = sta[1].top();
if (l != TANG_Yx && r != TANG_Yx) {
sta[0].pop(), sta[1].pop();
sta[x ^ opt].push(abs(l - r));
} else printf("UN");
}
if (strcmp(op, "DEL") == 0) {
scanf("%d", &x);
sta[x ^ opt].clear();
}
if (strcmp(op, "MOVE") == 0) {
int l, r;
scanf("%d%d", &l, &r);
l ^= opt, r ^= opt;
if (!sta[r].empty()) {
if (sta[l].empty()) {
sta[l].begin = sta[r].end;
sta[l].end = sta[r].begin;
sta[l].sz = sta[r].sz;
} else {
int tmp = S[sta[l].begin].find_pos(0);
S[sta[l].begin].nxt[tmp] = sta[r].begin;
tmp = S[sta[r].begin].find_pos(0);
S[sta[r].begin].nxt[tmp] = sta[l].begin;
sta[l].begin = sta[r].end;
sta[l].sz += sta[r].sz;
}
sta[r].clear();
}
}
if (strcmp(op, "SWAP") == 0) {
opt ^= 1;
}
puts("SUCCESS");
if (strcmp(op, "END") == 0) {
break;
}
}
bool flag = false;
while (sta[opt].top() != TANG_Yx) {
flag = true;
printf("%lld ", sta[opt].top());
sta[opt].pop();
}
if (!flag) printf("NONE");
puts("");
flag = false;
while (sta[opt ^ 1].top() != TANG_Yx) {
flag = true;
printf("%lld ", sta[opt ^ 1].top());
sta[opt ^ 1].pop();
}
if (!flag) printf("NONE");
puts("");
return 0;
}

  

[洛谷P4940]Portal2的更多相关文章

  1. 洛谷 U41572 Portal2

    U41572 Portal2 题目背景 某地ENLIGHTENED的XM研究所正在研究Portal的处理法则,想要揭示XM能量的来源以及应用XM能量.ENLIGHTENED的首席科学家Jacks发现其 ...

  2. 『题解』洛谷P1063 能量项链

    原文地址 Problem Portal Portal1:Luogu Portal2:LibreOJ Portal3:Vijos Description 在\(Mars\)星球上,每个\(Mars\)人 ...

  3. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  4. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  5. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  6. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  7. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  8. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  9. 洛谷P1538迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

随机推荐

  1. collections模块的使用

    1. Counter counter是collections中的一个模块, 它能够统计出字符串/文本中的每一个元素出现的次数, 并可以对结果进行进一步的处理. 使用方法 传入: 字符串 默认返回: C ...

  2. for循环小练习

    for循环是前测试循环语句 for(初始值:判定条件:步长){ 循环语句 } For循环原理: For循环第一次执行:首先执行语句1,然后执行语句2,如果条件为真,向内执行执行循环语句3. 如果条件为 ...

  3. HDSF读写文件

    HDFS 读取文件 HDFS的文件读取原理,主要包括以下几个步骤: 1.首先调用FileSystem对象的open方法,其实获取的是一个DistributedFileSystem的   实例. 2.D ...

  4. Python3 适合初学者学习的银行账户登录系统

    一.所用知识点: 1. for循环与if判断的结合 2. %s占位符的使用 3. 辅助标志的使用(标志位) 4. break的使用 二.代码示例: ''' 银行登录系统 ''' uname = &qu ...

  5. R语言学习笔记(十七):data.table包中melt与dcast函数的使用

    melt函数可以将宽数据转化为长数据 dcast函数可以将长数据转化为宽数据 > DT = fread("melt_default.csv") > DT family_ ...

  6. POJ2739 Sum of Consecutive Prime Numbers 确定某个数以内的所有素数

    参考:https://www.cnblogs.com/baozou/articles/4481191.html #include <iostream> #include <cstdi ...

  7. Git使用之二:下载远程代码到本地指定文件夹

    一.前期工作: 1.准备好本地的文件夹 2.如果后期需要继续以该文件夹进行同步的,则需要配置该文件夹,方法请参考之前的  Git使用之一:创建仓储和提交文件 二.用clone(克隆方式下载) 在本地下 ...

  8. c/c++指针理解

    指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址.要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占 ...

  9. ubuntu 关闭触控板

    第一种: 1 sudo rmmod psmouse    这个是禁用的 2 sudo modprobe psmouse 这个是启用的 这个方法很便捷,但是会将触点和触板都禁用了,一般还是希望保持触点是 ...

  10. 浅谈 kubernetes service 那些事 (下篇)

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 五.K8s 1.8 新特性--ipvs ipvs与iptables的性能差异 随着服务的数量增长,IPTables 规则则会成倍增长,这样带来的问题 ...