J - Agricultural Expression
問題文
とここちゃんはプログラミングの期末レポートの自由課題として新しい演算である農耕算を発明しました。農耕算は次の $3$ 種類の演算から成ります。
- 連結算 :
x+y
という形式で表される演算で、$x$ と $y$ をこの順に連結して返す。例えば123+456
は123456
を返す。また、$3$ 項以上にも同様に定義され、例えば1+23+456+7890
は1234567890
を返す。 - 成長算 :
G(x)
という形式で表される演算で、$x$ の各桁の数を $1$ 増やす。ただし、桁の数が $9$ である桁には何もしない。例えばG(4096)
は5197
を返す。 - 収穫算 :
H(x)
という形式で表される演算で、$x$ の各桁の総和を返す。例えばH(4096)
は19
を返す。
とここちゃんは農耕算を計算する電卓を作りました。この電卓は、次の BNF 記法で表された文法 $E$ によって生成された <expr>
を処理することができます。
<expr> := <term> | <term> + '+' + <expr>
<term> := <grow> | <harvest> | <number>
<grow> := 'G(' + <expr> + ')'
<harvest> := 'H(' + <expr> + ')'
<number> := <digit> | <digit> <number>
<digit> := '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
とここちゃんはこの電卓の試運転として、文字列 $S$ を電卓に入力しました。ここで、文字列 $S$ は文法 $E$ によって生成された <expr>
であることが保証されます。また、$S$ に含まれる <number>
の長さは $1000$ 以下であることが保証されます。
$S$ を計算した結果を求めてください。
制約
- $1 \le |S| \le 5 \times 10^5$
- $S$ に含まれる
<number>
の長さは $1000$ 以下 - $S$ は $E$ によって生成される
<expr>
部分点
※部分点の設定が他の問題と異なるため注意してください。
この問題はいくつかのデータセットに分かれており、それぞれのデータセットには追加の制約が設定されています。
データセットのすべてのテストケースに正解すると、そのデータセットに割り当てられた得点を獲得することができます。
各部分点の制約などの説明はリンク先のページを確認してください。
部分点のみ解答したい場合
部分点のみを解答したい場合、問題によっては結果が TLE となるケースが大量に発生し、ジャッジに時間がかかる可能性があります。
C++の assert
関数やPythonの assert
文などを用いて、変数の値によってプログラムを強制終了させる処理を書き加えることで TLE を防ぎ、より早く結果を得ることができます。
入力
入力は以下の形式で標準入力から与えられます。
$S$
出力
答えを $1$ 行に出力してください。
123+456
123456
本問題において +
は連結算であり、四則演算の和ではないことに注意してください。
この入力例はデータセット 1, 8 に含まれます。
G(4096)
5197
この入力例はデータセット 2, 8 に含まれます。
H(4096)
19
この入力例はデータセット 3, 8 に含まれます。
G(0000)+H(0000)
11110
<number>
は通常の 10 進数表記では省略する先頭の 0
が含まれる場合があることに注意してください。
この入力例はデータセット 4, 5, 8 に含まれます。
H(G(12345678901234567890))
108
各演算の計算順序に注意してください。文法 $E$ より入れ子になっている演算は内側から計算します。
H(G(12345678901234567890))=H(23456789912345678991)=108
となります。
この入力例はデータセット 6, 8 に含まれます。
G(H(57))+H(628+222)+H(H(00))
23220
各演算の計算順序に注意してください。文法 $E$ より成長算と収穫算は連結算より先に計算します。
G(H(57))+H(628+222)+H(H(00))=G(12)+H(628222)+H(0)=23+22+0=23220
となります。
この入力例はデータセット 7, 8 に含まれます。
G(998+H(244)+G(353))+H(3+G(H(14+G(15))+92)+65+G(3))
9992157536
この入力例はデータセット 8 に含まれます。