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


相关推荐

  • macbookpro安装anaconda_mac下python编程软件

    macbookpro安装anaconda_mac下python编程软件参考:https://www.cnblogs.com/xrblog/p/11839393.html安装Anaconda从官网下载,这里选择的是Python3.7版本的图形化安装包 安装后,在命令行中输入conda–version,如果安装成功,会显示版本号 但我并没有显示,所以根据Anaconda之Python环境配置(Mac版)配置了环境变量: 首先,找到Anaconda的安装路径下bin文件的位置,我的路径是/opt/anaconda3/bin (再记录一下,

    2022年8月29日
    4
  • Linux命令-fsync[通俗易懂]

    Linux命令-fsync[通俗易懂]对fsync命令只做简单介绍,不做详细原理解释。通过man命令查看fsync()函数有以下共识:1、**fsync(2)**函数是属于系统核心函数;2、unix系统下函数标注不同数值的含义1)、用户在shell环境可以使用的指令或可执行文件;2)、系统核心提供的可调用的函数与工具;3)、常用函数、函数库,大部分是C的函数库;4)、设备驱动程序,通常在/dev下;5)、配置文件或某…

    2022年5月6日
    302
  • 计算机网络协议详解怎么写_自考短线好还是长线好

    计算机网络协议详解怎么写_自考短线好还是长线好计算机网络协议详解:本篇文章主要总结一些常见的网络基础概念以及Linux系统中的网络相关设置方法,具体包括OSI七层协议、TCP/IP协议相关内容。

    2022年10月2日
    7
  • 字节跳动社招面试经验_字节hr面试后多久会通知你

    字节跳动社招面试经验_字节hr面试后多久会通知你虽然已经临近年末,但是还是萌生要看新机会的想法,主要的原因是觉得在目前的岗位上技术增长遇到的瓶颈,因此想去做一些更有挑战的工作。因为仍然准备继续在深圳工作,因此选定了三家公司,腾讯、字节跳动和sho

    2022年8月3日
    9
  • vscode 字体太小的问题,安装新字体

    vscode 字体太小的问题,安装新字体vscode 很好用 但是字体太小了 尤其是 linux 版本 字都拥挤在一起 1 左侧字体小 可以 ctrlshift 或者 ctrlshift 来控制界面整体缩放 2 右侧字体太小 可以安装新的字体 Fira Code v5 22 1 下载链接 FiraCode 为写程序而生的字体 简书 2 2windows 安装字体在 ttf 文件上逐个双击 打开字体管理器 点安装 2 3linux 安装字体 mkdir p usr share fo

    2025年10月29日
    2
  • repeater嵌套以及合计问题

    repeater嵌套以及合计问题这次是做免费品订单的详情页面,根据需求,要做如下展示看着还行,就是repeater里面嵌套一个repeater呗,因为之前做过类似的,代码实现不是什么大问题,存储过程也都可以搞定,第二层的repeater这么绑定就可以了protectedvoidrptSapOrderList_ItemDataBound(objectsender,RepeaterItemEventArgse)

    2022年7月14日
    27

发表回复

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

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