AtCoder Regular Contest 036
C
偶然ジェネレータ
AtCoder
⌀ 2139
原题
← BD →
翻译中…

Problem Statement

翻译中…

高橋くんはゲーム会社に勤めている。

翻译中…

高橋くんは上司から、乱数表を作るよう指示を受けた。

翻译中…

乱数表は $0,1$ のいずれかでのみ構成される長さ $N$ の数列で、そのうちいくつかの要素には、どちらの値が入るかが決まっている。

翻译中…

ところで高橋くんは、上司から「あまり分布が偏った乱数表は作らないでほしい」という注文も受けている。具体的には、乱数表からどのような連続する部分列を取り出しても、その部分列に含まれる $0$ の個数と $1$ の個数の差が $K$ 以下でなければならない。

翻译中…

高橋くんはこのような条件を満たす乱数表が全部でいくつあるのか数えることにした。

翻译中…

Input

翻译中…

入力は以下の形式で標準入力から与えられる。

翻译中…

N K
S

翻译中…
  • $1$ 行目には、$2$ つの整数 $N (1 ≦ N ≦ 300)$ と $K (1 ≦ K ≦ N)$ が空白区切りで書かれている。これは、乱数表の長さが $N$ で、許容される最大の差が $K$ であることを表す。
  • $2$ 行目には、乱数表に関する情報を表す長さ $N$ の文字列 $S$ が与えられる。文字列 $S$ は 0,1,? のみで構成されており、左から $i (1 ≦ i ≦ N)$ 文字目は乱数表の左から $i$ 番目の要素についての情報を表す。
翻译中…

部分点

翻译中…

この問題には部分点が設定されている。

翻译中…
  • $N ≦ 12$ を満たすデータセットに正解した場合は、$10$ 点が与えられる。
  • $K ≦ 5$ を満たすデータセットに正解した場合は、上記とは別に $30$ 点が与えられる。
  • 追加制約のないデータセットに正解した場合は、上記とは別に $60$ 点が与えられる。
翻译中…

Output

翻译中…

考えられる乱数表の総数を $1,000,000,007(= 1000000007)$ で割った余りを $1$ 行に出力せよ。出力の末尾には改行を入れること。

翻译中…

样例

Input #1
9 4
?011?1110
Output #1
2
乱数表として [$0$, $0$, $1$, $1$, $0$, $1$, $1$, $1$, $0$] を考えます。この乱数表では、$0$ の個数と $1$ の個数の差として考えられる最大値は、左から $3$ 番目の要素を先頭、$8$ 番目の要素を末尾とした長さ $6$ の数列 [$1$, $1$, $0$, $1$, $1$, $1$] における差 $4(= 5 - 1)$ です。 他にも乱数表 [$1$, $0$, $1$, $1$, $0$, $1$, $1$, $1$, $0$] が条件を満たします。
Input #2
9 3
?011?1110
Output #2
0
条件を満たす乱数表は存在しません。
Input #3
9 1
???1?????
Output #3
1
Input #4
12 5
???0??1??11?
Output #4
172
题目信息
题号
arc036_c
时间限制
2 s
内存限制
256 MB

题面与样例版权归 AtCoder 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。