[洛谷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;
}

转载于:https://www.cnblogs.com/kma093/p/10327326.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值