栈,线性dp,P1310 [NOIP2011 普及组] 表达式的值

news2024/12/23 17:56:12

P1310 [NOIP2011 普及组] 表达式的值 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 

这道题很有意义  

题目描述

对于1 位二进制变量定义两种运算:

运算的优先级是:

  1. 先计算括号内的,再计算括号外的。

  2. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算。例如:计算表达式A⊕B × C时,先计算 B × C,其结果再与 A 做⊕运算。

现给定一个未完成的表达式,例如_+(_*_),请你在横线处填入数字00或者11 ,请问有多少种填法可以使得表达式的值为00。

输入格式

共 2 行。

第1 行为一个整数 L,表示给定的表达式中除去横线外的运算符和括号的个数。

第2 行为一个字符串包含 L 个字符,其中只包含’(’、’)’、’+’、’*’这44 种字符,其中’(’、’)’是左右括号,’+’、’*’分别表示前面定义的运算符“⊕”和“×”。这行字符按顺序给出了给定表达式中除去变量外的运算符和括号。

输出格式

共1 行。包含一个整数,即所有的方案数。注意:这个数可能会很大,请输出方案数对10007取模后的结果。

输入输出样例

输入 #1复制

4
+(*)

输出 #1复制

3

说明/提示

【输入输出样例说明】

给定的表达式包括横线字符之后为:_+(_*_)

在横线位置填入(0 、0 、0) 、(0 、1 、0) 、(0 、0 、1) 时,表达式的值均为0 ,所以共有3种填法。

【数据范围】

对于 20% 的数据有 0≤L≤10。

对于 50% 的数据有0≤L≤1,000。

对于 70% 的数据有 0≤L≤10,000 。

对于 100%的数据有 0≤L≤100,000。

对于50% 的数据输入表达式中不含括号。

 解析:

 表达式求值的升级版,结合了最简单的线性dp,但我一开始也没想到能这么做

套用表达式求值的模板:3302. 表达式求值, 栈的应用-CSDN博客

 但要将int类型的那个存值得栈改为pair<int,int>类型

a.first 表示当前计算结果为 0 得方案数;

a.second 表示当前计算结果为 1 得方案数;

计算得过程:

if (c == '+') {
        ans.first = (a.first * b.first)%mod;
        ans.second = (a.second * b.second + a.second * b.first+ a.first * b.second)%mod;
    }
    else {
        ans.first = (a.first * b.first + a.second * b.first + a.first * b.second)%mod;
        ans.second = (a.second * b.second)%mod;
    }

这道题中的栈和dp的都很简单,但放在一起就想不到了;

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<map>

using namespace std;
typedef long long LL;
const int N = 1e5 + 5,mod=10007;
stack<char> stk;
stack<pair<int,int>>st;
char s[N];
int n;

void eval() {
	pair<int,int> b = st.top(); st.pop();
	pair<int, int> a = st.top(); st.pop();
	char c = stk.top(); stk.pop();
	pair<int, int> ans = {0,0};
	if (c == '+') {
		ans.first = (a.first * b.first)%mod;
		ans.second = (a.second * b.second + a.second * b.first+ a.first * b.second)%mod;
	}
	else {
		ans.first = (a.first * b.first + a.second * b.first + a.first * b.second)%mod;
		ans.second = (a.second * b.second)%mod;
	}
	st.push(ans);
}

int main() {
	map<char, int>mp = { {'+',1},{'*',2},{'(',0} };
	cin >> n;
	scanf("%s", s + 1);
	char c;
	st.push({1,1});
	for (int i = 1; i <= n; i++) {
		c = s[i];
		if (c == '(') {
			stk.push('(');
		}
		else if (c == ')') {
			while (stk.size()&&stk.top() != '(') {
				eval();
			}
			stk.pop();
		}
		else {
			while (stk.size() && mp[c] <= mp[stk.top()])eval();
			stk.push(c);
			st.push({ 1,1 });
		}
	}
	while (stk.size())eval();
	cout << st.top().first << endl;
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1182136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

reduxjs/toolkit的使用

用法&#xff1a; 下载包进行安装&#xff0c;store主入口&#xff0c;hooks简化store(复制粘贴进去即可)&#xff0c;slice相当于store中的模块化&#xff0c;最后在页面根入口导入store&#xff0c;并使用即可 1、安装 npm install reduxjs/toolkit react-redux -D2、目录结…

【网络编程】传输层——TCP协议

文章目录 TCP协议TCP协议格式窗口大小六个标志位确认应答机制超时重传机制连接管理机制三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP的应用层协议TCP与UDP的对比 TCP相关实验CLOSE_WAIT状态实验TIME_WAIT状态实验TI…

为你提供5个解决“找不到msvcp120.dll无法继续执行代码”

在使用电脑计算机运行软件时&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“找不到msvcp120.dll无法继续执行代码”。这个问题通常是由于缺少相应的运行库文件或者文件损坏导致的。下面我将为你提供5个解决方法&#xff0c;帮助你解决这个问题。 第1个方法.…

​软考-高级-信息系统项目管理师教程 第四版【第18章-项目绩效域-思维导图】​

软考-高级-信息系统项目管理师教程 第四版【第18章-项目绩效域-思维导图】 课本里章节里所有蓝色字体的思维导图

MATLAB画图由于线段太多导致导出图片模糊的解决办法

Matlab画图如果figure内的线条过多&#xff0c;或者散点过多&#xff0c;导出的图片会模糊&#xff0c;解决方案 解决方法就在于figure的导出设置中。 在设置的渲染选项中&#xff0c;渲染器有两个&#xff0c;分别为painters和OpenGL&#xff0c;分别为矢量格式输出和位图输出…

【原创】java+swing+mysql爱心捐赠管理系统设计与实现

摘要&#xff1a; 爱心捐赠管理系统旨在管理和优化捐赠过程&#xff0c;提高效率&#xff0c;增强透明度&#xff0c;并鼓励更多的个人和企业参与公益捐赠&#xff0c;用户可以捐款或者捐物。本系统采用javaswing界面可视化技术&#xff0c;数据库使用mysql。 功能分析&#…

数据库的进阶增删查改操作(一)

进阶操作 一.约束1.约束类型2.NULL约束3.unique:唯一约束4.default:默认值约束5.primary key:主键约束6.foreign key:外键约束7.check约束(了解内容) 二.表的设计1.一对一2.一对多3.多对多 三.新增四.查询1.聚合函数1.1 count1.2 sum1.3 avg1.4 max1.5 min 2.group by 字句3.ha…

win10虚机扩容C盘

需求&#xff1a; 在虚机管理平台上&#xff0c;将win10虚机的C盘空间扩容至200G&#xff0c;当前空间为100G 操作步骤 1.在虚机平台上&#xff0c;将硬盘1的大小增加至200G 如下图 点击保存&#xff1b; 查看win10虚机&#xff0c;发现C盘空间还是100G&#xff0c;如下图…

【WinForm详细教程八】WinForm中的TreeView控件

文章目录 TreeView 基本的知识属性方法事件 TreeView 案例演示案例一&#xff1a;案例二&#xff1a; TreeView 控件 用于展示分层数据&#xff0c;它以树形结构展示信息&#xff0c;每个节点可以有一个或多个子节点。TreeView 控件允许用户以可展开和可折叠的形式查看复杂的层…

josef约瑟低电压继电器 DY-110 10-109V 辅助电源·DC110V 嵌入式面板安装

DY-110/110V电压继电器 系列型号 DY-110电压继电器&#xff1b;GY-110电压继电器&#xff1b; GDY-110电压继电器&#xff1b;DY-110/AC电压继电器&#xff1b; GY-110/AC电压继电器&#xff1b;GDY-110/AC电压继电器&#xff1b; DL-110电压继电器&#xff1b;GL-110电压…

代码随想录 Day39 动态规划 LeetCode T139 单词拆分 动规总结篇1

前言 在本期开始之前,让我们再回顾一下动规五部曲,并且今天的任务只有一道题,我们顺便也回顾一下之前学过的知识点,动规的前面集中化题型,0-1背包,完全背包,以及很多种遍历顺序,让秋秋和大家娓娓道来. 首先我们回顾一下动态规划的动规五部曲. 1.明确dp数组的元素含义 2.明确dp数…

技术分享 | app自动化测试(Android)--触屏操作自动化

导入TouchAction Python 版本 from appium.webdriver.common.touch_action import TouchAction Java 版本 import io.appium.java_client.TouchAction; 常用的手势操作 press 按下 TouchAction 提供的常用的手势操作有如下操作&#xff1a; press 按下 release 释放 …

Python高级进阶(1)----深入理解Python迭代器与生成器

文章目录 1. 迭代器协议代码示例:2. 生成器基础代码示例:3. 使用yield的高级技巧代码示例:4. 生成器表达式代码示例:迭代器和生成器是Python中实现迭代的两种主要方式,它们都允许用户创建可以遍历数据集的对象。在Python中,迭代器协议是指对象需要遵守__iter__()和__next…

05【保姆级】-GO语言的标识符

之前我学过C、Java、Python语言时总结的经验&#xff1a; 先建立整体框架&#xff0c;然后再去抠细节。先Know how&#xff0c;然后know why。先做出来&#xff0c;然后再去一点点研究&#xff0c;才会事半功倍。适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。对于GO语言&a…

Java开发注意事项和细节说明

&#x1f468;‍&#x1f393;&#x1f468;‍&#x1f393;博主&#xff1a;发量不足 个人简介&#xff1a;耐心&#xff0c;自信来源于你强大的思想和知识基础&#xff01;&#xff01; &#x1f4d1;&#x1f4d1;本期更新内容&#xff1a;Java开发注意事项和细节说明&…

项目部署之安装和配置Canal

1.Canal介绍 Canal是阿里巴巴的一个开源项目&#xff0c;基于java实现&#xff0c;整体已经在很多大型的互联网项目生产环境中使用&#xff0c;包括阿里、美团等都有广泛的应用&#xff0c;是一个非常成熟的数据库同步方案&#xff0c;基础的使用只需要进行简单的配置即可。 …

HelpLook VS HelpDocs:知识库工具一对一比较

您是否正在寻找比HelpDocs更好的替代方案&#xff1f;您是否希望使用功能更强大的类似工具&#xff1f;HelpDocs是一款简单易用的知识库软件&#xff0c;可以在一个集中的位置创建、托管和监控自助服务门户。凭借其模板、原生集成和详细的分析功能提供不错的用户体验。尽管它具…

我在Vscode学OpenCV 图像运算(权重、逻辑运算、掩码、位分解、数字水印)

文章目录 权重 _ 要求两幅图像是相同大小的。[ 1 ] 以数据说话&#xff08; 1&#xff09; 最终&#xff1a;&#xff08; 2 &#xff09;gamma _输出图像的标量值 [ 2 ] 图像的展现力gamma并不等同于增加曝光度&#xff08; 1 &#xff09;gamma100&#xff08; 2 &#xff09…

武器检测YOLOV8NANO

武器检测&#xff08;匕首&#xff0c;步枪&#xff0c;手枪&#xff09;&#xff0c;采用YOLOV8NANO训练&#xff0c;得到pt模型&#xff0c;然后转换成Onnx模型&#xff0c;供OPENCV DNN调用&#xff0c;支持C,PYTHON,ANDROID。有标注的训练集 武器检测YOLOV8NANO

04-react基础知识-路由

一、react路由环境安装 使用指令&#xff1a;npm i --save react-router-dom type/react-router-dom进行react路由环境安装 二、引入路由 在main.jsx文件中引入该语句&#xff1a; import { createBrowserRouter, RouterProvider } from react-router-dom 定义一个变量rou…