表达式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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Maven配置及IDEA中配置Maven详解

    Maven配置及IDEA中配置Maven详解1、Maven安装配置首先到官网下载http://maven.apache.org/download.cgi 我们需要下载的bin.zip结尾的文件,下载后解压到指定文件夹(全英文路径) 配置环境变量确保JAVA环境变量已经配置好了。添加M2_HOME和MAVEN_HOME环境变量到Windows环境变量。 PATH变量添加%M2_HOME%\bin修…

    2022年5月11日
    81
  • 我的书单

    整理了一下自己购物车里的书单,推荐一下。

    2022年3月11日
    39
  • zabbix监控面试题[通俗易懂]

    zabbix监控面试题[通俗易懂]监控基础概论zabbix并非监控,而是实现监控的工具Zabbix-server是一个c/s和b/s结构安装zabbbix的服务器安装时和php7.1有冲突:若此机器上已经安装php7.1就安装不上zabbix监控知识体系为什么要使用监控1.对系统不间断实时监控2.实时反馈系统当前状态3.保证服务可靠性安全性4.保证业务持续稳定运行如果去到…

    2022年6月12日
    54
  • 免费的dns_常用的dns有哪些

    免费的dns_常用的dns有哪些国内部分常用免费DNS服务整理(2021-09) 名称 首选地址 备选地址 114DNS 114.114.114.114 114.114.115.115 阿里DNS 223.5.5.5 223.6.6.6 百度DNS 180.76.76.76 ipv6地址:2400:da00::6666 腾讯DNS(DNSPod) 119.29.29.29 119.28.28.28 腾讯DNS(DNSPod) 182.254.

    2022年9月4日
    3
  • 提高效率:公司内外网同时使用

    提高效率:公司内外网同时使用

    2021年8月20日
    45
  • js如何实现页面跳转_js当前页面跳转

    js如何实现页面跳转_js当前页面跳转文章转载自:  js页面跳转的几种代码    http://www.studyofnet.com/news/185.html 页面跳转方式 1.在原来的窗体中直接跳转用window.location.href=”你所要跳转的页面”;window.history.back(-1);返回上一页window.history.history.back()wind

    2022年8月13日
    7

发表回复

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

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