AT_dwango2017final_a 計算ドリル
题目描述
[problemUrl]: https://atcoder.jp/contests/dwacon2017-honsen/tasks/dwango2017final_a
ニコニコテレビちゃん为了锻炼大脑,决定做一些简单的计算。不过,由于ニコニコテレビちゃん不是人类,所以它使用逆波兰表示法进行计算。
具体来说,对于由 `0` ~ `9`、`-`、`+` 组成的字符串 $S$,按照以下规则进行计算:
- 首先,假设有一个空的、无限长的栈。然后,从头开始依次读取 $S$ 的每个字符。
- 如果遇到 `0` ~ `9`,则直接压入栈中。
- 如果遇到 `+`,则从栈中取出一个数 $a$,再取出一个数 $b$,然后将 $b+a$ 压回栈中。
- 如果遇到 `-`,则从栈中取出一个数 $a$,再取出一个数 $b$,然后将 $b-a$ 压回栈中。
- 最后,如果栈中只剩下一个数,则该数即为答案。
- 如果栈中不只一个数,或者在取数时栈已空,则说明 $S$ 不是一个合法的表达式。
ニコニコテレビちゃん随意写下了一个字符串 $S$。它觉得仅仅计算结果太无聊了,于是提出了如下问题:
- 最多可以修改 $K$ 个字符,将该字符串变为一个合法的表达式吗?如果可以,在所有合法表达式中,计算结果的最大值是多少?
不过这个问题太难了,所以请你帮它解决。
输入格式
输入通过标准输入给出,格式如下:
> $K$ $S$
输出格式
如果无法通过最多 $K$ 次修改将其变为合法表达式,则输出 `NG`。如果可以,则输出 `OK`,并在下一行输出计算结果的最大值。
说明/提示
### 限制条件
- $S$ 由 `0` ~ `9`、`-`、`+` 组成
- $1 \leq |S| \leq 52$
- $0 \leq K \leq |S|$
### 样例解释 1
该表达式用普通记法表示为 `2+1`。
### 样例解释 2
可以将其改写为 `29+`,此时答案最大。
### 样例解释 3
可以将其改写为 `91-`,此时答案最大。
### 样例解释 4
这种表达式作为逆波兰表示法不是合法表达式。
### 样例解释 5
可以将其改写为 `12+4+6+`,此时答案最大。
由 ChatGPT 4.1 翻译