CF39A C*++ Calculations

题目描述

C\*++ 语言与 C++ 十分相似。这种相似性体现在,用 C\*++ 编写的程序有时会表现出不可预测的行为,并带来完全出乎意料的效果。例如,想象一下 C\*++ 中的一个算术表达式如下( $ expression $ 是主要术语): - $ expression $ ::= $ summand $ | $ expression+summand $ | $ expression-summand $ - $ summand $ ::= $ increment $ | $ coefficient $ \* $ increment $ - $ increment $ ::= a++ | ++a - $ coefficient $ ::= 0|1|2|\ldots|1000 例如,"5\*a++-3\*++a+a++" 在 C\*++ 中就是一个合法的表达式。 因此,我们有一个由若干项通过 "+" 或 "-" 号分隔组成的和。每一项是 “a++” 或 “++a” 与某个整数系数相乘。如果系数被省略,则视为 $ 1 $。 这种和在 C\*++ 中的计算方式如下:首先依次计算所有的项,然后按照通常的算术规则进行求和。如果一项包含 "a++",则在计算时先将变量 $ a $ 的值乘以系数,然后再将 $ a $ 的值加 $ 1 $。如果一项包含 "++a",则操作顺序相反:先将 $ a $ 加 $ 1 $,然后乘以系数。 这些项可以按任意顺序计算,这就是为什么计算结果有时会完全不可预测!你的任务是求出该表达式可能取得的最大值。

输入格式

第一行输入一个整数 $ a $($ -1000 \leq a \leq 1000 $),表示变量 $ a $ 的初始值。第二行输入一个组合型 C\*++ 表达式,表达式的项数不超过 $ 1000 $。保证表达式字符串不包含空格和制表符。

输出格式

输出一个整数——表达式的最大可能值。

说明/提示

以第二个样例为例。初始时 $ a=3 $。假设我们首先计算第一项,然后计算第二项。第一项的值为 $ 3 $,$ a $ 的值加 $ 1 $。计算第二项时,$ a $ 再加 $ 1 $(变为 $ 5 $)。第二项的值为 $ 5 $,相加得 $ 8 $。如果我们先计算第二项,再计算第一项,那么两个项的结果都是 $ 4 $,结果也为 $ 8 $。 由 ChatGPT 5 翻译