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)。
输入输出样例
NUM 600000000
ADD
END
3
0
600000000
1
600000000
ERROR
600000001
说明
【提示】
仔细考虑不合法的情况,避免不必要的RE和WA。
【数据规模】
函数操作步数<=2000
询问数<=2000
思路:大模拟。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 100000
using namespace std;
string s[];
int tot,n;
int num[MAXN],stack[MAXN];
void gets(int x){
tot++;
cin>>s[x];
if(s[x]=="END") return ;
if(s[x]=="NUM") scanf("%d",&num[x]);
gets(x+);
}
int main(){
gets();
scanf("%d",&n);
for(int i=;i<=n;i++){
int opt,top=,flag=;
scanf("%d",&opt);
stack[++top]=opt;
for(int j=;j<tot;j++){
if(s[j]=="NUM"){
if(num[j]>){ cout<<"ERROR"<<endl; flag=; break; }
stack[++top]=num[j];
}
else if(s[j]=="POP"){
if(top==){ cout<<"ERROR"<<endl; flag=; break; }
top--;
}
else if(s[j]=="INV"){
if(-stack[top]>){ cout<<"ERROR"<<endl; flag=;break; }
stack[top]=-stack[top];
}
else if(s[j]=="DUP"){
if(top==){ cout<<"ERROR"<<endl; flag=; break; }
stack[++top]=stack[top-];
}
else if(s[j]=="SWP"){
if(top<){ cout<<"ERROR"<<endl; flag=; break; }
swap(stack[top],stack[top-]);
}
else if(s[j]=="ADD"){
if(top<||stack[top]+stack[top-]>||stack[top]+stack[top-]<-){ cout<<"ERROR"<<endl; flag=; break; }
stack[top-]=stack[top]+stack[top-];top--;
}
else if(s[j]=="SUB"){
if(top<||stack[top-]-stack[top]>||stack[top-]-stack[top]<-){ cout<<"ERROR"<<endl; flag=; break; }
stack[top-]=stack[top-]-stack[top];top--;
}
else if(s[j]=="MUL"){
if(top<||stack[top]*stack[top-]>||stack[top]*stack[top-]<-){ cout<<"ERROR"<<endl; flag=; break; }
stack[top-]=stack[top]*stack[top-];top--;
}
else if(s[j]=="DIV"){
if(top<||stack[top-]==){ cout<<"ERROR"<<endl; flag=; break; }
stack[top-]=stack[top]/stack[top-];top--;
}
else if(s[j]=="MOD"){
if(top<||stack[top-]==){ cout<<"ERROR"<<endl; flag=; break; }
stack[top-]=stack[top]%stack[top-];top--;
}
}
if(flag) continue;
if(top!=){ cout<<"ERROR"<<endl; continue; }
else cout<<stack[top]<<endl;
}
}
50分代码
P2186 小Z的栈函数的更多相关文章
- [洛谷P2186] 小Z的栈函数
题目链接: 传送门 题目分析: 大模拟,先得存操作,然后再处理每个数-- 有一个小优化,在处理操作的时候顺便判一下最后栈里是不是有且仅有一个数,但A完了才想起来,所以就算了-- 总之就是个模拟题--没 ...
- 洛谷 2186 小Z的栈函数
https://www.luogu.org/problem/show?pid=2186 题目描述 小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作: N ...
- P2186 小Z的函数栈
有点恶心的模拟(代码写整齐一点不就好了) 以下情况算错: 1.运行中有数的绝对值大于1000000000 2.除以和取模的时候第一个数为0 3.取栈顶元素时栈内元素不够 上代码 #include< ...
- 小Z爱序列(NOIP信(sang)心(bin)赛)From FallDream(粗制单调队列&单调栈的算法解析)
原题: 小Z最擅长解决序列问题啦,什么最长公共上升然后下降然后上升的子序列,小Z都是轻松解决的呢. 但是小Z不擅长出序列问题啊,所以它给了你一道签到题. 给定一个n个数的序列ai,你要求出满足下述条件 ...
- 【20170521校内模拟赛】热爱生活的小Z
学长FallDream所出的模拟赛,个人感觉题目难度还是比较适中的,难度在提高+左右,可能比较接近弱省省选,总体来讲试题考查范围较广,个人认为还是很不错的. 所有试题如无特殊声明,开启-O2优化,时限 ...
- BZOJ 2038 小Z的袜子(hose) 莫队算法模板题
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2038 题目大意: 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中 ...
- 【20170920校内模拟赛】小Z爱学习
所有题目开启-O2优化,开大栈空间,评测机效率为4亿左右. T1 小 Z 学数学(math) Description 要说小 Z 最不擅长的学科,那一定就是数学了.这不,他最近正在学习加法运算.老 ...
- 小Z爱图论(NOIP信(sang)心(bin)赛)From FallDream
题目: 小Z最近喜欢上了图论,于是他研究了一下图的连通性问题.但是他遇到了一个难题. 给定一个n个点的有向图,求有多少点对(i,j)满足从i点出发能到达点j ? 小Z仅会简单的朴素算法,所以他想问问你 ...
- 1775. [国家集训队2010]小Z的袜子
[题目描述] 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到 ...
随机推荐
- Windows server 2008 布署FTP服务器实例(适用于阿里云)!
Windows server 2008 布署FTP服务器实例(适用于阿里云). 1.打开管理.配置-用户-新建用户,如:ftp_user,并设置password.选择永只是期和password不能更改 ...
- node05---模块
Node.js开发服务器,数据.路由.本地关心的效果,交互: Node.js实际上是极客开发出的一个小玩具,不是银弹.有着别人不具备的怪异特点: 首先,Node不为每个用户开辟一个线程,所以非常单线程 ...
- DDos游戏行业受攻击最多
游戏行业遭遇DDOS攻击现状. 游戏一直是最易遭受黑客攻击的行业,高居全年DDOS攻击的48%.大规模攻击居多,平均值均超过100Gbps,攻击峰值急速上升,同比2015年增加了137.1%,其中攻击 ...
- 使用CSS3制作网站常用的小三角形
现在在前端开发中,经常会看到一些小三角形,如一些导航的下拉菜单,还有一些聊天信息的气泡模式,很多时候我们都是通过切图片的方法来制作,今天零度给大家分享一个完全通过css3实现的小三角效果. 先上htm ...
- List methods
Python provides methods that operate on lists. For example, append adds a new element to the end of ...
- POJ 4007 Flood-it!
题目:http://poj.org/problem?id=4007 思路: (lyd学长的思路) IDA*算法,首先迭代加深限制搜索深度. 可以发现如果当前矩阵中除了左上角的连通块之外,共有M种颜色, ...
- 三分钟学会用SpringMVC搭建最小系统(超详细)_转载
前言 做 Java Web 开发的你,一定听说过SpringMVC的大名,作为现在运用最广泛的Java框架,它到目前为止依然保持着强大的活力和广泛的用户群. 本文介绍如何用eclipse一步一步搭建S ...
- ReactiveCocoa简单使用20例
ReactiveCocoa简单使用20例 1. 观察值变化 你别动,你一动我就知道. //当self.value的值变化时调用Block,这是用KVO的机制,RAC封装了KVO @weakify(se ...
- [转] -- html5手机网站自适应需要加的meta标签
webapp开发初期,会碰到在pc端开发好的页面在移动端显示过大的问题,这里需要在html head中加入meta标签来控制缩放 <meta name=" viewport" ...
- MVC-easyui-EF
easyui+jQuery+MVC+EF的一个演示 环境:visual studio 2013+sql server 创建新项目:visual C# -> Web -> visual st ...