atcoder#ABC246H. [ABC246Ex] 01? Queries
[ABC246Ex] 01? Queries
配点 : 点
問題文
0
、1
、?
のみからなる長さ の文字列 が与えられます。
また、 個のクエリ が与えられます。
ここで、 について、 は を満たす整数であり、 は 0
、1
、?
のうちのいずれかの文字です。
の順に、クエリ に関して以下の処理を行ってください。
- まず、 の先頭から 文字目を に変更する。
- その後、「 に含まれるすべての
?
をそれぞれ独立に0
または1
に置き換えて得られる文字列の(連続とは限らない)部分列」としてあり得る空でない文字列の個数を、 で割ったあまりを出力する。
制約
- は整数
- は
0
、1
、?
のみからなる長さ の文字列 - は
0
、1
、?
のうちいずれかの文字
入力
入力は以下の形式で標準入力から与えられる。
出力
行出力せよ。 について、 行目には 番目のクエリ に対する答え(すなわち、問題文中の処理 2. における文字列の個数を で割ったあまり)を出力せよ。
3 3
100
2 1
2 ?
3 ?
5
7
10
- 個目のクエリで、まず
110
に変更されます。110
の部分列としてあり得る文字列は、0
、1
、10
、11
、110
の 個です。よって、 個目のクエリに対する答えとして を出力します。 - 個目のクエリで、まず
1?0
に変更されます。1?0
の?
を0
または1
に置き換えて得られる文字列は、100
と110
の つです。 これらのどちらかの部分列としてあり得る文字列は、0
、1
、00
、10
、11
、100
、110
の 個です。よって、 個目のクエリに対する答えとして を出力します。 - 個目のクエリで、まず
1??
に変更されます。1??
の?
を0
または1
に置き換えて得られる文字列は、100
、101
、110
、111
の つです。 これらのいずれかの部分列としてあり得る文字列は、0
、1
、00
、01
、10
、11
、100
、101
、110
、111
の 個です。よって、 個目のクエリに対する答えとして を出力します。
40 10
011?0??001??10?0??0?0?1?11?1?00?11??0?01
5 0
2 ?
30 ?
7 1
11 1
3 1
25 1
40 0
12 1
18 1
746884092
532460539
299568633
541985786
217532539
217532539
217532539
573323772
483176957
236273405
で割ったあまりを出力することに注意してください。