表达式1&&2&&3&&4_矩阵化表达式求值

表达式1&&2&&3&&4_矩阵化表达式求值这道题一看就跟正常表达式求值差不多,我们需要一步一步保存前一部分的得0和得1的方案数,然后再与后面的进行运算,求出下个状态的方法总数,看到这里,很多朋友肯定想到了动态规划,然而如何保存运算顺序呢,那就要用到中缀表达式转后缀表达式,再按照运算顺序进行计算,下面是代码:#include<cstdio>#include<cstring>#include<…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

这里写图片描述
这里写图片描述
这道题一看就跟正常表达式求值差不多,我们需要一步一步保存前一部分的得0和得1的方案数,然后再与后面的进行运算,求出下个状态的方法总数,看到这里,很多朋友肯定想到了动态规划,然而如何保存运算顺序呢,那就要用到中缀表达式转后缀表达式,再按照运算顺序进行计算,下面是代码:

#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
const int maxn=100000;
const int mod=10007;
using namespace std;

char ss[maxn+100],s[maxn+100];
int l,top,a[maxn+100],b[maxn+100];

void add()
{
    int k,k0,k1;
    k=a[0];
    k0=a[k-1]*a[k];
    k1=a[k-1]*b[k]+b[k-1]*a[k]+b[k-1]*b[k];
    a[--a[0]]=k0%mod,b[a[0]]=k1%mod;
}

void multiply()
{
    int k,k0,k1;
    k=a[0];
    k0=a[k-1]*a[k]+a[k-1]*b[k]+b[k-1]*a[k];
    k1=b[k-1]*b[k];
    a[--a[0]]=k0%mod,b[a[0]]=k1%mod;
}

int main()
{
    int i,j,k;
    char tmp;

    scanf("%d%s\n",&l,ss);
    a[0]=b[0]=top=0;
    for(i=0; i<l; i++) {
        tmp=ss[i];
        switch(tmp){
            case '(':
                s[++top]=tmp;
                break;
            case '+':{
                if(i==0 || (i>0 && ss[i-1]!=')'))
                    a[++a[0]]=1,b[a[0]]=1;

                while(top>0 && s[top]!='('){
                    if(s[top]=='+')add();
                    else multiply();
                    top--;
                }
                s[++top]=tmp;
                break;
            }
            case '*':{
                if((i>0 && ss[i-1]!=')') || i==0)
                    a[++a[0]]=1,b[a[0]]=1;
                while(top>0 && s[top]=='*')
                    multiply(),top--;
                s[++top]=tmp;
                break;
            }
            default:{
                if(ss[i-1]!=')')
                    a[++a[0]]=1,b[a[0]]=1;
                while(s[top]!='('){
                    if(s[top]=='+')add();
                    else multiply();
                    top--;
                }
                top--;
                break;
            }
        }
    }
    if(top>0 && ss[l-1]!=')')
        a[++a[0]]=1,b[a[0]]=1;
    while(top>0){
        if(s[top]=='+')add();
        else multiply();
        top--;
    }
    if(l==0)printf("%d\n",1);
    else printf("%d\n",a[a[0]]);
    return 0;
}

这里可以看到,处理时遇到(时直接入栈,+号时要将所有的之前入栈的*出栈,遇到)再将(出栈,然后按照这种方法运算就行了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193684.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dell T420热插拔安装过程

    dell T420热插拔安装过程

    2022年3月6日
    53
  • JetBrains Fleet 初体验

    JetBrains Fleet 初体验几天前获得了fleet的体验资格。长话短说,今天就来和你一起看看现在的fleet都有啥先看名字–fleet什么是fleet?n.舰队;捕鱼船队;(一国的)全部军舰,海军看来,JetBrains是想让”OneIDEtocodeitall.”的口号落实,真正的实现一人成军。配合它自带的Distributedmode,前端后端统一管理。或许真正的Monorepo就会来临?再看图标铁灰色底座配合缺了两个缺口和天空蓝淡紫渐变的圆球主体,我猜它…抱歉我看不懂,于是我当场质问了JetBra.

    2022年6月14日
    83
  • 2018 java 阿里笔试题

    2018 java 阿里笔试题想进阿里的同学注意了,这里是修真院面试笔记整理,那么这里就给大家分享一下【2018java阿里笔试题】1、String,StringBuffer,StringBuilder的区别是什么?String为什么是不可变的?2、Vector,ArrayList,LinkedList的区别是什么?3、HashTable,HashMap,TreeMap区别?5、Tomcat,A…

    2025年10月14日
    4
  • 在centos7上安装夜莺监控

    在centos7上安装夜莺监控所需包(仅作参考)在/opt目录下建立目录/n9e和/temp安装包存放在/opt/temp目录下mysql-5.7.31-linux-glibc2.12-x86_64.7znginx-1.14.2.7zp7zip-16.02-10.el7.x86_64.rpmredis-6.0.6.7zn9e-2.7.2.7z1.安装7zrpm-ivhp7zip-16.02-10.el7.x86_64.rpmyum-yinstallepel-releaseyum-yi

    2022年5月30日
    55
  • CGI,FAST-CGI,PHP-FPM的区别

    CGI,FAST-CGI,PHP-FPM的区别

    2021年10月9日
    78
  • consolewriteline用法_reviewmodule

    consolewriteline用法_reviewmodule严格模式ES6的模块自动采用严格模式,不管你有没有在模块头部加上"usestrict";。严格模式的限制如下变量必须声明后再使用函数的参数不能有同名属性,否则报错不能

    2022年7月31日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号