[洛谷P2186] 小Z的栈函数
题目链接:###
题目分析:###
大模拟,先得存操作,然后再处理每个数……
有一个小优化,在处理操作的时候顺便判一下最后栈里是不是有且仅有一个数,但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\n");
else printf("%lld\n",sta[top]);
}
return 0;
}
[洛谷P2186] 小Z的栈函数的更多相关文章
- 洛谷 2186 小Z的栈函数
https://www.luogu.org/problem/show?pid=2186 题目描述 小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作: N ...
- P2186 小Z的栈函数
P2186 小Z的栈函数 题目描述 小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作: NUM X:栈顶放入X. POP:抛弃栈顶元素. INV:将栈顶 ...
- Bzoj2038/洛谷P1494 小Z的袜子(莫队)
题面 Bzoj 洛谷 题解 考虑莫队算法,首先对询问进行分块(分块大小为\(sqrt(n)\)),对于同一个块内的询问,按照左端点为第一关键字,右端点为第二关键字排序.我们统计这个区间内相同的颜色有多 ...
- 洛谷——P2117 小Z的矩阵
P2117 小Z的矩阵 题目描述 小Z最近迷上了矩阵,他定义了一个对于一种特殊矩阵的特征函数G.对于N*N的矩阵A,A的所有元素均为0或1,则G(A)等于所有A[i][j]*A[j][i]的和对2取余 ...
- 洛谷P2188 小Z的 k 紧凑数
P2188 小Z的 k 紧凑数 题目描述 小 Z 在草稿纸上列出了很多数,他觉得相邻两位数字差的绝对值不超过 k 的整数特别奇特,称其为 k 紧凑数. 现在小 Z 想知道 [l,r] 内有多少个 k ...
- 洛谷—— P2117 小Z的矩阵
https://www.luogu.org/problemnew/show/2117 题目描述 小Z最近迷上了矩阵,他定义了一个对于一种特殊矩阵的特征函数G.对于N*N的矩阵A,A的所有元素均为0或1 ...
- 洛谷 P2117 小Z的矩阵
P2117 小Z的矩阵 题目描述 小Z最近迷上了矩阵,他定义了一个对于一种特殊矩阵的特征函数G.对于N*N的矩阵A,A的所有元素均为0或1,则G(A)等于所有A[i][j]*A[j][i]的和对2取余 ...
- 洛谷 2187 小Z的笔记
[题解] DP. 设f[i]表示前i个字母,保留第i个字母,最多可以保留多少个字母:设g[i]为当前字母为i的位置对应的f的最大值. 转移方程就是f[i]=max(f[i], g[j]+1) (j与 ...
- [洛谷P2107] 小Z的AK计划
题目类型:贪心,堆 传送门:>Here< 题意:给出\(N\)个房间,每个房间距离起点的距离为\(x[i]\),每个房间可以选择进去和不进去,如果进去了那么要\(t[i]\)秒后才能出来. ...
随机推荐
- Gym - 100676F Palindrome —— 并查集
题目链接:https://vjudge.net/contest/155789#problem/E 题解: 由于是回文串,所以可以先将在对称位置的字符放在同一个集合(如果期间有两个非‘?’,且不相等,则 ...
- linux应用之openssh server安装及配置(centos)
安装OpenSSH Server 首先,我们搜索一下CentOS的软件库里面有没有已经定义好的SSH服务器包: $ yum search ssh ... ... openssh.x86_64 : An ...
- bzoj2132【圈地计划】
题面 思路: 一开始以为和为了博多一样,两边连一样的,后来发现中间连负边的话根本不会割,即割断两块收益为负,所以WA的起飞…… 正解是先黑白染色,每个点和它周围的点连边方式不同.对于黑点A,S--&g ...
- 基于区域的全卷积神经网络(R-FCN)简介
在 Faster R-CNN 中,检测器使用了多个全连接层进行预测.如果有 2000 个 ROI,那么成本非常高. feature_maps = process(image)ROIs = region ...
- app基础
1界面:Layout 2.控件 3.整个窗口:Activity 4. ctrl + H : 查看类的继承关系 5. shift + F1:打开类的文档 6. Button button = (Butt ...
- 推荐 BI Work
推荐阅读 BI Work 的文章,作为学习用 http://www.cnblogs.com/biwork
- TwinCAT3提示找不到TcPch.h错误解决
我使用git对TwinCAT3的工程进行版本控制,但是别的电脑clone的仓库会提示找不到TcPch.h的错误,无法编译. 明明文件就在那里,就是不让编译... 解决办法更奇葩,只需要把工程文件压缩, ...
- Linux日志分割脚本
该脚本的功能是定时分割日志文件 #!/usr/bin/env bash #定时分割清理日志文件 #usage="Usage: logrotate (start|stop) file (lin ...
- Asset Catalog Help (十一)---Removing Images and Sets
Removing Images and Sets Optimize the size of an asset catalog by removing unused images or sets. 通过 ...
- Python死锁与递归锁
Lock() 互斥锁会导致死锁,用RLock()递归锁代替. 递归锁:可以连续acquire多次,每acquire一次计数器+1(无论acquire的是哪个锁),只有计数为0才能被acquire mu ...