TUATPC2024Summer (Algorithm)
コンテスト日時
2024/09/26 (Th) 20:00 - 23:00

J - Agricultural Expression

Darjeeling
2
s
1024
MB
300

問題文

とここちゃんはプログラミングの期末レポートの自由課題として新しい演算である農耕算を発明しました。農耕算は次の $3$ 種類の演算から成ります。

  • 連結算 : x+y という形式で表される演算で、$x$ と $y$ をこの順に連結して返す。例えば 123+456123456 を返す。また、$3$ 項以上にも同様に定義され、例えば 1+23+456+78901234567890 を返す。
  • 成長算 : 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$ 行に出力してください。

入力例 1
123+456
出力例 1
123456

本問題において + は連結算であり、四則演算の和ではないことに注意してください。

この入力例はデータセット 1, 8 に含まれます。

入力例 2
G(4096)
出力例 2
5197

この入力例はデータセット 2, 8 に含まれます。

入力例 3
H(4096)
出力例 3
19

この入力例はデータセット 3, 8 に含まれます。

入力例 4
G(0000)+H(0000)
出力例 4
11110

<number> は通常の 10 進数表記では省略する先頭の 0 が含まれる場合があることに注意してください。

この入力例はデータセット 4, 5, 8 に含まれます。

入力例 5
H(G(12345678901234567890))
出力例 5
108

各演算の計算順序に注意してください。文法 $E$ より入れ子になっている演算は内側から計算します。

H(G(12345678901234567890))=H(23456789912345678991)=108 となります。

この入力例はデータセット 6, 8 に含まれます。

入力例 6
G(H(57))+H(628+222)+H(H(00))
出力例 6
23220

各演算の計算順序に注意してください。文法 $E$ より成長算と収穫算は連結算より先に計算します。

G(H(57))+H(628+222)+H(H(00))=G(12)+H(628222)+H(0)=23+22+0=23220 となります。

この入力例はデータセット 7, 8 に含まれます。

入力例 7
G(998+H(244)+G(353))+H(3+G(H(14+G(15))+92)+65+G(3))
出力例 7
9992157536

この入力例はデータセット 8 に含まれます。

提出
C++23 (g++ 12.2.0)