プログラミングコンテストの合宿で出す問題のアイディアが出ずに困っていたイクタ君は、ある日友人に相談した。
イクタ君「こういうアルゴリズムを使わないと解けないような問題が出したいんですけど、なにかありませんかね?」
友人「それではこういうものを考えたらいいんじゃないですか」
このようにしてその友人は以下のような問題の原案となるアイデアを考えてくれた。
2進数A,Bが与えられた時、以下の様なクエリを処理せよ。
iビット目というのが 0-origin で表されていることに注意せよ。 つまり、Aの最下位ビットから0ビット目とは最下位ビットを表す。
入力は以下の形式で与えられる。
N A B
Q1
...
QN
1行目にクエリの数N,2進数A, Bが与えられる。
2からN+1行目には以下の様なクエリが与えられる。
Qが出力クエリを、A i,B iはそれぞれAの最下位ビットからiビット目、Bの最下位ビットからiビット目を反転させる変更クエリを表している。
入力中の各変数は以下の制約を満たす。
出力クエリごとに答えを1行に出力せよ。
4 10000 00101 Q A 0 B 1 Q
3 4
最初の出力クエリでは A=10000, B=00101, A+B=10101なので求めるxは10011
次の出力クエリでは A=10001, B=00111, A+B=11000なので求めるxは10111
9 0110111101 0010100111 Q B 4 Q A 4 Q B 9 Q A 8 Q
9 9 9 10 9