#bitflyer2018finale. [bitflyer2018_final_e]数式とクエリ
[bitflyer2018_final_e]数式とクエリ
問題文
(
, )
, +
, -
, *
, a
のみからなる数式 が与えられます(詳細は問題文の後半を参照してください)。 に含まれる a
の個数を とします。
個の整数 と 個の整数 からなる 個のクエリが与えられるので、これらのクエリを処理してください。
クエリ: 与えられた数式中の左から 番目の a
を に、左から 番目の a
をそれぞれ に置き換えた数式の値と を法として合同な 以上 以下の整数を出力する。
この問題で与えられる数式 は、以下のような BNF 表記の <expr>
シンボルで表されます。
<expr> ::= <term> | <expr> '+' <term> | <expr> '-' <term>
<term> ::= <value> | <term> '*' <value>
<value> ::= 'a' | '(' <expr> ')'
制約
与えられる数式に含まれる a
の個数を とします。
- の長さは 以下
- は問題文中の BNF 表記の
<expr>
シンボルとして表せる - は整数
入力
入力は以下の形式で標準入力から与えられる。
... :
出力
行出力せよ。 行目 () には、 番目のクエリの答えを出力せよ。
入力例 1
(a-(a))*a
4
0 1 2
1 1
1 2
2 1
1 4
出力例 1
0
2
1000000005
6
例えば最初のクエリでは、左から 番目の a
には が、左から 番目の a
には が、左から 番目の a
には を代入し、計算すると、 となり、 が答えです。
番目ののクエリでは、左から 番目の a
には が、左から 番目の a
には が、左から 番目の a
には を代入し、計算すると、 となり、 を法として と合同な 以上 以下の整数である、 が答えです。
入力例 2
(a)*a+((a+(a*(a))-(a)*a+a*a))*a
10
8 6 6 4 8 1 4 3 8 9
3 4
3 9
8 4
3 7
4 0
8 9
3 6
9 0
6 8
9 4
出力例 2
552
597
642
579
282
1002
570
354
318
462