Official

B - BNF Backup Editorial by hos_lyric


(より詳しい解説は後日ブログで公開します)

<expression><term> は常に奇数文字です.

数式の各位置について,括弧のネストの深さを考えます.例えば (0+(0)) については \(0,1,1,1,2,2,1,0\) となります.これの偶奇に注目すると,奇数文字目 (\(1\)-based) について

  • 0 の左はネスト偶数,右はネスト偶数
  • ( の左はネスト偶数,右はネスト奇数
  • ) の左はネスト奇数,右はネスト偶数
  • + の左はネスト奇数,右はネスト奇数

が成り立つことがわかります.偶数文字目についてはこれの偶奇を反転させたものが成り立ちます.これらは帰納法で証明できます.

よって,入力の情報からネストの深さの偶奇がすべて定まり (先頭と末尾は \(0\) です),残りの文字がすべて復元できます.

posted:
last update: