#abc0034. [abc003_4]AtCoder社の冬
[abc003_4]AtCoder社の冬
問題文
AtCoder社の社員室は ( 行 列)の区画に区切られており、各区画には、社員のデスク、サーバーラックのどちらかがあるか、何もない空きスペースのどれかです。
AtCoder社のある地域の冬は寒く、暖房代をできるだけ節約するため、社員室の必要なスペースのみを区切って使用することに決めました。
しかし、資材の問題で、区画に平行な長方形の領域で区切らなければいけません。
そこで、
- デスク、または、サーバーラックのある最も上の行のすぐ上、
- デスク、または、サーバーラックのある最も下の行のすぐ下、
- デスク、または、サーバーラックのある最も左の列のすぐ左、
- デスク、または、サーバーラックのある最も右の列のすぐ右
の 辺で囲まれた区画を壁で囲みました。
すると壁で囲まれた領域は ( 行 列)の区画になりました。
また、AtCoder社の社員室には、 個のデスクと、 個のサーバーラックがあります。
もともと、社員室に、どのようにデスクとサーバーラックの配置されていたのか、考えうるパターン数を で割った余りを求めるプログラムを書いてください。
入力
入力は以下の形式で標準入力から与えられる。
- 行目には、AtCoder社の社員室の区画の行数、列数を表す整数 がスペース区切りで与えられる。
- 行目には、社員室の壁に囲まれた部分の区画の行数、列数を表す整数 がスペース区切りで与えられる。
- 行目には、社員室にある社員のデスクの数、サーバーラックの数を表す整数 がスペース区切りで与えられる。
出力
社員室にどのようにデスクとサーバーラックの配置されていたのか、考えうるパターン数を で割った余りを 行で出力せよ。
また、出力の末尾には改行を入れること。
部分点
の場合のテストケースに全て正解した場合、 点満点中の 点が与えられる。
満点解法は非常に難しいので、部分点を確実に取ることから考えましょう。
入力例 1
3 2
2 2
2 2
出力例 1
12
- このケースは を満たすため、部分点のテストケースに含まれる可能性があります。
- 以下の 通りの配置が考えられます。ここで
D
はデスク、L
はサーバーラック、.
は何もないことを表します。
DD DL DL LD LD LL .. .. .. .. .. ..
LL DL LD DL LD DD DD DL DL LD LD LL
.. .. .. .. .. .. LL DL LD DL LD DD
入力例 2
4 5
3 1
3 0
出力例 2
10
- このケースは を満たすため、部分点のテストケースに含まれる可能性があります。
入力例 3
23 18
15 13
100 95
出力例 3
364527243
- このケースは を満たすため、部分点のテストケースに含まれる可能性があります。
- 社員室の配置パターンは $145180660592914517790287604376765671109248284280228061640640$ 通りで、これを で割った余りである を出力してください。
入力例 4
30 30
24 22
145 132
出力例 4
976668549
- このケースは を満たさないため、部分点のテストケースに含まれることはありません。
- 無理に正解しようとせず、余裕のある人だけ挑戦してみてください。