洛谷 P2186 小Z的栈函数
洛谷 P2186 小Z的栈函数
题目
题目描述
小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作:
NUM X:栈顶放入X。
POP:抛弃栈顶元素。
INV:将栈顶元素取出,然后放入它的相反数。
DUP:再放入一个和栈顶元素相同的数。
SWP:交换栈顶的两个元素。
ADD:取出栈顶的两个元素,两元素相加,所得结果放入栈内。
SUB:取出栈顶的两个元素,第二个元素减去第一个元素,所得结果放入栈内。
MUL:取出栈顶的两个元素,两元素相乘,所得结果放入栈内。
DIV:取出栈顶的两个元素,第二个元素整除以第一个元素,所得结果放入栈内。
MOD:取出栈顶的两个元素,第二个元素取模以第一个元素,所得结果放入栈内。
END:结束这个程序。
然后,小Z用上面的11种操作写了一个一元函数f(x)。x就是放入栈里面第一个初始元素。然后经过这个函数的一系列操作,当函数结束的时候,正常情况下,栈里面会有唯一的一个元素。剩下的这个元素就作为函数f(x)的返回值。
小Z有N个询问,询问每个值x经过上述函数所映射出的f(x)是多少。但是这个由于机器太老了,跑起东西来太慢了,小Z又是一个急性子,所以请你们写一个程序,来帮助小Z计算他查询的f(x)。
输入输出格式
输入格式:
输入若干行,仅包含上述11个操作,用来描述函数f(x)的操作,函数的结束保证以END结尾;
接下来一个整数N;
下面N行每行一个数字ai,代表栈里面的初始元素。
输入数据不保证合法!!!
输出格式:
如果最后栈内不是一个元素,输出“ERROR”;
还有,由于这台机器太破了,所以如果运算过程中有数字的绝对值大于1000000000机器也输出“ERROR”;
如果输入数据不合法,导致中途退出,输出“ERROR”;
否则输出对应的f(x)。
输入输出样例
输入样例#1:
NUM 600000000
ADD
END
3
0
600000000
1
输出样例#1:
600000000
ERROR
600000001
说明
【提示】
仔细考虑不合法的情况,避免不必要的RE和WA。
【数据规模】
函数操作步数<=2000
询问数<=2000
题解
一道很水的模拟题,就是代码很烦…
代码
#include <cstdio>
#include <string>
#include <iostream>
#include <stack>
#define INF 1000000000
#define maxn 2005
using namespace std;int tot,n,flag;
int a[maxn];
stack<int> stk;
struct des{int num;string s;
} q[maxn];void end()
{printf("ERROR\n");
}bool check(int x)
{if (x>INF||x<-INF) return true;else return false;
}void num(int x)
{if (check(q[x].num)) flag=1;else stk.push(q[x].num);
}void inv()
{int x=stk.top();if (check(-x)) flag=1;else {stk.pop();stk.push(-x);}}void dup()
{int x=stk.top();stk.push(x);
}void swp()
{int x,y;x=stk.top();stk.pop();y=stk.top();stk.pop();if (check(x)||check(y)) flag=1;else {stk.push(x);stk.push(y);}
}void add()
{int x,y;x=stk.top();stk.pop();y=stk.top();stk.pop();if (check(x+y)) flag=1;else stk.push(x+y);
}void sub(){int x,y;x=stk.top();stk.pop();y=stk.top();stk.pop();if (check(y-x)) flag=1;else stk.push(y-x);
}void mul()
{int x,y;x=stk.top();stk.pop();y=stk.top();stk.pop();if (check(x*y)) flag=1;else stk.push(x*y);
}void div()
{int x,y;x=stk.top();stk.pop();y=stk.top();stk.pop();if (!x||check(y/x)) flag=1;else stk.push(y/x);
}void mod()
{int x,y;x=stk.top();stk.pop();y=stk.top();stk.pop();if (!x&&check(y%x)) flag=1;else stk.push(y%x);
}int main(){tot=0;while(true){cin>>q[tot].s;if (q[tot].s=="NUM") scanf("%d",&q[tot].num);if (q[tot].s=="END") break;else tot++;}scanf("%d",&n);for (int i=0;i<n;i++) scanf("%d",&a[i]);for (int i=0;i<n;i++){while (stk.size()!=0) stk.pop();stk.push(a[i]);flag=0;for (int j=0;j<tot;j++){if (check(a[i])){flag=1;break;}if (q[j].s=="NUM") num(j);else if (q[j].s=="POP") stk.pop();else if (q[j].s=="INV") inv();else if (q[j].s=="DUP") dup();else if (q[j].s=="SWP") swp();else if (q[j].s=="ADD") add();else if (q[j].s=="SUB") sub();else if (q[j].s=="MUL") mul();else if (q[j].s=="DIV") div();else if (q[j].s=="MOD") mod();if (flag==1) break;}if (flag==1){end();continue;}if (stk.size()!=1) end();else printf("%d\n",stk.top());}return 0;
}
洛谷 P2186 小Z的栈函数相关推荐
- 洛谷 P2191 小Z的情书
题目背景 众所周知,小Z是高富帅的典范和代表,所以他很很多很多的妹纸.小Z要写情书给他的妹纸了,作为一个谨慎的人,他当然不会直白的写在纸上(否则被那群损友发现岂不糟了?). 题目描述 虽然小Z谨小慎微 ...
- 2017提高组D1T1 洛谷P3951 小凯的疑惑
洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...
- 洛谷 P4430 小猴打架
洛谷 P4430 小猴打架 题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打 ...
- 信息学奥赛一本通 1924:【03NOIP普及组】栈 | 洛谷 P1044 [NOIP2003 普及组] 栈
[题目链接] ybt 1924:[03NOIP普及组]栈 洛谷 P1044 [NOIP2003 普及组] 栈 [题目考点] 递推.递归 栈 [解题思路]:一维递推 设数组a,a[i]表示i个数组成的数 ...
- (最小割)洛谷P1361 小M的作物
洛谷P1361 小M的作物 思路: 这是一个两者取一的模型,将点集一分为二. 最小割在数值上等同于最大流.割去权值和最小的边,使图分成两部分,割下来的边权值和为最小割. 对于此题,先不考虑种在一起的情 ...
- 【01背包求方案数模板】洛谷 P1164 小A点菜
洛谷 P1164 小A点菜 https://www.luogu.org/problemnew/show/P1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆, ...
- 洛谷[P1120 小木棍]
洛谷[P1120 小木棍] 题目: 思路: 枚举小木棒可能的长度,从数组最大值开始枚举,这个值能被总长度整除才是可行的 在使用dfs枚举小木棒的每一种可能,如果不可能就找下一个可能的长度开始枚举 注意 ...
- 洛谷-P1125-笨小猴
[NOIP2008 提高组] 笨小猴 - 洛谷 解题思路: 1.由题可得,输入一个只包含字母的字符串,那么用string str 来表示,判断里面字母出现最多的次数和最少的次数,max和min 2.如 ...
- 洛谷P2257 YY的GCD 莫比乌斯函数反演+线性筛
洛谷P2257 YY的GCD 标签 莫比乌斯反演 线性筛 前言 这题貌似和莫反没多大关系,就是用到了一个莫比乌斯函数的性质了,其他就是推公式,优化和式. 我的第一道懵逼反演-真的好难好难-而且套路特别 ...
最新文章
- 使用PyTorch时,最常见的4个错误
- HUD 5687(字典树)
- java连连看(GUI)
- 启动一个线程是用run()还是start()?
- nginx服务器配置/websocket nginx 配置笔记
- iOS判断是模拟器还是真机
- 史上最贵黑客事件!中本聪用代码亲手杀死 1844.67 亿枚比特币!
- Linux eBPF和XDP高速处理数据包;使用EBPF编写XDP网络过滤器;高性能ACL
- 输入234输出432的c语言程序,C程序设计第1-4章习题集
- TTS Service Extended (进程:com.google.tts)意外停止 恢复被阉割的TTS文字转语音功能
- SERC2013 J You Win!
- 启动mongodb时发现错误libcrypto.so.10
- 软件测试最牛的8本书籍—你有读过吗?
- onlyoffice+vue实现在线预览在线编辑
- php微信昵称保存,附件十四 存储微信昵称的处理方法
- GSL(C数学运算库)安装和使用教程
- 协同过滤(collaborative filtering)
- 机器学习习题(16)
- Zhong__k8s基础尝试和配置flannel
- [ 数据通信面试篇 ] 数通面试题大集合(详解),看完直怼面试官(一)
热门文章
- kafka reassign 限速_为什么德国的高速就能不限速?
- 2013年上海市居住证新政策解读
- PostgreSQL 怎么通过命令来恢复删除的数据
- win7 按修改时间范围文件搜索
- mysql从5.7平滑升级到8.0.27
- 移动APP的测试流程及方法
- 使用树莓派与微信公众平台对接(python)
- 【机器学习】对数线性模型之Logistic回归、SoftMax回归和最大熵模型
- python惰性求值例子_惰性求值和yield-Python
- 中国煤层气开发市场发展态势及投资规划深度研究报告2022-2028年