[洛谷P2186] 小Z的栈函数

摘要:
有一个小优化,在处理操作的时候顺便判一下最后栈里是不是有且仅有一个数,但A完了才想起来,所以就算了……总之就是个模拟题……没什么算法,但细节很多我就是来水个博客代码:####includeusingnamespacestd;inlinelonglongread(){intcnt=0,f=1;charc;c=getchar();while(!

题目链接:###

传送门

题目分析:###

大模拟,先得存操作,然后再处理每个数……
有一个小优化,在处理操作的时候顺便判一下最后栈里是不是有且仅有一个数,但A完了才想起来,所以就算了……
总之就是个模拟题……没什么算法,但细节很多我就是来水个博客

代码:###

#include<bits/stdc++.h>
using namespace std;
inline long long read(){
	int cnt=0,f=1;char c;
	c=getchar();
	while(!isdigit(c)){
		if(c=='-')f=-f;
		c=getchar();
	}
	while(isdigit(c)){
		cnt=cnt*10+c-'0';
		c=getchar();
	}
	return cnt*f;
}
int n;
char s[200];
int opr[20005],tot=0;
long long sta[20005];
long long x,top=1;
long long a[20005],u=0;	long long p=-1;
bool flag=false;
bool check1(){
	if(u>1000000000||-u>1000000000)return false;
	else return true;
}
bool check2(){
	if(top>1||top==0)return false;
	else return true;
}
int main(){
	memset(opr,0,sizeof(opr));
	memset(a,128,sizeof(a));

	while(1){
		scanf("%s",s+1);
		if(s[1]=='E')break;
		else {
		if(s[1]=='N'&&s[2]=='U'){
			opr[++tot]=-10;
			a[tot]=read();
		}
		if(s[1]=='P')opr[++tot]=2;
		if(s[1]=='I')opr[++tot]=3;
		if(s[1]=='D'&&s[2]=='U')opr[++tot]=4;
		if(s[1]=='S'&&s[2]=='W')opr[++tot]=5;
		if(s[1]=='A')opr[++tot]=6;
		if(s[1]=='S'&&s[2]=='U')opr[++tot]=7;
		if(s[1]=='M'&&s[2]=='U')opr[++tot]=8;
		if(s[1]=='D'&&s[2]=='I')opr[++tot]=9;
		if(s[1]=='M'&&s[2]=='O')opr[++tot]=10;
		}
	}
	n=read();
	while(n--){
		flag=false;
		top=0;
		x=read();
		sta[++top]=x;
		for(register int i=1;i<=tot;i++){
			if(opr[i]==-10){
				sta[++top]=a[i];
				if(a[i]>1000000000||-a[i]>1000000000){flag=true;break;}
			}
			if(opr[i]==2){
				if(!top)flag=true;
				else top--;
			}
			if(opr[i]==3){
				if(!top)flag=true;
				else
				sta[top]=-sta[top];
			}
			if(opr[i]==4){
				if(!top)flag=true;
				else{
					++top;
					sta[top]=sta[top-1];
				}
			}
			if(opr[i]==5){
				if(!top||top==1)flag=true;
				else swap(sta[top],sta[top-1]);
				}
			if(opr[i]==6){
				if(!top||top==1)flag=true;
				else{
					u=sta[top]+sta[top-1];
					sta[--top]=u;
					if(!check1())flag=true;
				}
			}
			if(opr[i]==7){
				if(!top||top==1)flag=true;
				else{
					u=sta[top-1]-sta[top];
					sta[--top]=u;
				}
				if(!check1())flag=true;
			}
			if(opr[i]==8){
				if(!top||top==1)flag=true;
				else{
					u=sta[top-1]*sta[top];
					sta[--top]=u;
				}
				if(!check1())flag=true;
			}
			if(opr[i]==9){
				if(!top||top==1||sta[top]==0)flag=true;
				else{
					u=sta[top-1]/sta[top];
					sta[--top]=u;
				}
				if(!check1())flag=true;
			}
			if(opr[i]==10){
				if(!top||top==1)flag=true;
				else{
					u=sta[top-1]%sta[top];
					sta[--top]=u;
				}
				if(!check1())flag=true;
			}
		}
		if(!check2())flag=true;
		if(!check1())flag=true;
		if(flag)printf("ERROR
"); 
		else printf("%lld
",sta[top]);
	}
	return 0;
}

免责声明:文章转载自《[洛谷P2186] 小Z的栈函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Css3动画(一) 如何画3D旋转效果或者卫星围绕旋转效果Pytorch学习笔记02----深度学习中的epochs,batch_size,iterations详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

java.net.URISyntaxException的解决办法

直接采用Stringurl=“http:count=1”;HttpGethttpget=新的HttpGet(url);HttpResponseresponse=client.execute(httpget);例如,“|”&amp;因此,不能直接使用String而不是URI来访问。然后我们可以使用URL生成URI的方法来解决这个问题。代码如下:URLu...

页面加载时自动执行(加载)js的几种方法

Js调用onload方法window.onload=function(){func1();func2();func3();}二、JQ方法1.整个页面的document全部加载完成以后执行。不幸的这种方式不仅要求页面的DOMtree全部加载完成,而且要求所有的外部图片和资源全部加载完成。更不幸的是,如果外部资源,例如图片需要很长时间来加载,那么这个js方法执行...

Ubuntu安装时怎样分区

应该首先放置启动分区。并将引导设置为主分区。如果是双系统或多系统安装,通常可以选择逻辑分区。首先,Grub可以在1024柱面后面引导Linux内核;第二,即使有多个Linux安装,/boot也可以完全不共享。此外,非独立/引导分区仅占用根文件夹下约20MB的空间。所以决定是否启动。...

node.js

而同样,Node也提供了child_process.fork来创建Node的子进程。请参考文章后的multi-node的性能测试,可以看到在多Node进程的情景下,响应请求的速度被大幅度提高。在文章的写作中,Node最新发布的0.5.10版本新增了cluster启动参数。参数的使用方式如下:nodeclusterserver.js启动Node的时候,在附加了...

H3C交换机如何配置管理VLAN

1.输入“系统视图”(缩写为“sys”)进入系统配置模式[H3C]...

用VBA去除Excel工作表保护密码

今天帮同事解决个EXCEL问题,现记在这,以作备忘现象:想要修改保护单元格的内容,在使用“工具”菜单“保护”子菜单的“撤消工作表保护”命令,这时要求输入密码。"ExitSubEndIfFori=65To66:Forj=65To66:Fork=65To66Forl=65To66:Form=65To66:Fori1=65To66Fori2=65To66:Fori...