Time Limit: 2 Seconds Memory Limit: 65536 KB
Do you know reverse Polish notation (RPN)? It is a known notation in the area of mathematics and computer science. It is also known as postfix notation since every operator in an expression follows all of its operands. Bob is a student in Marjar University. He is learning RPN recent days.
To clarify the syntax of RPN for those who haven't learnt it before, we will offer some examples here. For instance, to add 3 and 4, one would write "3 4 +" rather than "3 + 4". If there are multiple operations, the operator is given immediately after its second operand. The arithmetic expression written "3 - 4 + 5" in conventional notation would be written "3 4 - 5 +" in RPN: 4 is first subtracted from 3, and then 5 added to it. Another infix expression "5 + ((1 + 2) × 4) - 3" can be written down like this in RPN: "5 1 2 + 4 × + 3 -". An advantage of RPN is that it obviates the need for parentheses that are required by infix.
In this problem, we will use the asterisk "*" as the only operator and digits from "1" to "9" (without "0") as components of operands.
You are given an expression in reverse Polish notation. Unfortunately, all space characters are missing. That means the expression are concatenated into several long numeric sequence which are separated by asterisks. So you cannot distinguish the numbers from the given string.
You task is to check whether the given string can represent a valid RPN expression. If the given string cannot represent any valid RPN, please find out the minimal number of operations to make it valid. There are two types of operation to adjust the given string:
- Insert. You can insert a non-zero digit or an asterisk anywhere. For example, if you insert a "1" at the beginning of "2*3*4", the string becomes "12*3*4".
- Swap. You can swap any two characters in the string. For example, if you swap the last two characters of "12*3*4", the string becomes "12*34*".
The strings "2*3*4" and "12*3*4" cannot represent any valid RPN, but the string "12*34*" can represent a valid RPN which is "1 2 * 34 *".
Input
There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case:
There is a non-empty string consists of asterisks and non-zero digits. The length of the string will not exceed 1000.
Output
For each test case, output the minimal number of operations to make the given string able to represent a valid RPN.
Sample Input
3 1*1 11*234** *
Sample Output
1 0 2
题意:
给出 T 组样例,每个样例都有一串数字 + * 的字符串。问最少需要多少个操作使其变为逆波兰式,可以增加字符进去,也可以任意交换两个字符的位置。
思路:
当 num < star + 1 的时候才需要添加数字进去,设添加的数字数为 k ,之后统计的时候,num 数初始值设为 k,star 数初始值设为 0,再从头开始扫一遍,若遇到当前 num < star + 1,说明需要交换操作。最后输出 k + 交换次数 即为答案。
AC:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; char str[1005]; int main() { int t; scanf("%d", &t); while (t--) { scanf("%s", str); int len = strlen(str); int num = 0, star = 0; for (int i = 0; i < len; ++i) { if (str[i] == '*') ++star; else ++num; } int k = star + 1 - num; if (k < 0) k = 0; int sum = k; num = k; star = 0; for (int i = 0; i < len; ++i) { if (str[i] == '*') ++star; else ++num; if (star + 1 > num) { ++sum; ++num; --star; } } printf("%d\n", sum); } return 0; }
相关推荐
极简轻盈高效的纯文本笔记工具软件。如果你需要一款 Windows 上的极简高效的笔记软件,Notation 将会是你很好的选择。而它配合 SimpleNote 又能完美的跨平台使用,使得该软件实用性大大提升。
标题中的“Notation”是一款专为追求效率的用户设计的纯文本笔记工具,它以其极简的界面和高效的功能著称。这款软件的核心优势在于它的轻盈性,启动速度快,这意味着用户可以迅速打开并开始记录想法,而不会被漫长的...
Notation Player,可以将MIDI文件以乐谱的形式显示和打印。MID音乐格式原理是源文件只提供一串或几串乐谱信息流,一个乐符对应你电脑声卡中的一个标准音,当播放器读取迷笛时,就是一个从声卡里提取、加工、合成工作...
### UML 1.1 Notation Guide:统一建模语言的可视化表示 #### 文档概述 UML(Unified Modeling Language)1.1 Notation Guide 是一份详尽...通过深入理解这份文档中的内容,可以更好地利用UML来设计和分析软件系统。
- **大O表示法** (O-notation):用来描述算法复杂度的上限,即算法在最坏情况下的运行时间或空间需求。 - **Θ表示法** (Theta-notation):用来描述算法复杂度的精确表达,即算法在平均情况下的运行时间和空间需求。...
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立...
JSON,全称JavaScript Object Notation,是一种轻量级的数据交换格式,被广泛应用于网络服务间的数据传输以及存储数据。它的设计目标是简洁、易读、易写,同时也方便机器进行解析和生成。JSON 根植于 JavaScript ...
业务流程建模标注(Business Process Modeling Notation,BPMN)详细介绍 - BPEL
Notation Jl
波兰表达式c语言递归 polish_notation_recursion polish_notation_recursion polish_notation_recursion polish_notation_recursion
4. **JSON格式**:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Http模拟请求中,工具能够对返回的JSON数据进行格式化,使其更便于阅读和理解。 ...
在实际应用中,dice_notation库可以用于创建游戏引擎、统计分析工具,或者是需要随机元素的任何软件。例如,你可以用它来开发一个RPG战斗模拟器,或者用于生成随机的创意写作提示。 安装这个库非常简单,只需要将...
#### 内容分析 文档中提到的 **ITU-T X.682** 标准是关于 ASN.1 中的约束规范部分。这部分主要关注于如何在 ASN.1 数据类型中定义和应用各种约束条件。这些约束可以确保数据类型满足特定的要求,比如值范围、长度等...
本文档探讨了在处理微分方程时,两种不同的符号表示方法:经典的表示法与现代的功能性表示法,并分析了这两种表示法之间的差异、优缺点以及应用场景。作者认为现代功能性表示法更易于理解、减少歧义并有助于程序执行...
JSON(JavaScript Object Notation)是广泛使用的数据交换格式,它简洁明了,易于人阅读和编写,同时也容易让机器解析和生成。在HttpDebug中,用户可以清晰地查看和分析返回的JSON数据,包括键值对、数组、嵌套对象...
"dotted-notation" 库可能特别适用于需要频繁处理嵌套数据的Web服务、API接口或者数据分析项目。开发者可以通过导入这个库,然后使用其提供的API来便捷地操作和管理数据。 安装这个库通常可以通过Python的包管理器...
深度学习文档 Standard notations for Deep Learning This document has the purpose of discussing a new standard for deep learning mathematical notations.
JSON(JavaScriptObject Notation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯。这些特性使JSON成为理想的数据交换语言。易于人...
通过这种方式,你可以灵活地对模拟数据进行各种分析和处理,为实际项目中的数据预处理、建模和验证奠定基础。这个小实践展示了Spark处理JSON数据的能力,以及DataFrame和SQL在数据处理中的强大功能。对于初学者来说...