タイトル:CNRとマインスイーパXiaoluはパズルの特に好きで、はまって彼女の最新の2つのは自分自身を救い出すことができません。
ゲームのインターフェイスには地雷を副格子ないマトリックス、格子内の行列いくつかの鉱山、です。ゲーム、グリッドが知られており、未知の状態かもしれません。グリッドは、地雷を知られていない場合は、グリッド上に書き込まれる単一の数字があり、これは、グリッド接続の総数が8つの近傍グリッド鉱山を表します。
ゲームは、CNRとXiaolu 3行N列になりました(両方の開始と連続正の整数の数から)しなかった行列、この行列は、すべての知られているグリッドの第2行、及び鉱山、他の2行は未知であり、前記鉱山の総数も不明です。
CNRとXiaoluは地雷の敷設の、ライン1とライン3どのように多くの正規のプログラムを知ってほしいです。
複数組を含む入力テストデータは、正の整数Tの最初の行は、データセットの数を表します。
唯一のN非空の文字列の桁の長さによって各データ行は、3行N列、iはグリッドのi番目の行の数2行列を表す英数字の文字列を示す行列があります。
その文字列の長さNを確保するために、<= 10000、データセットの数<= 100。
一つだけの数行あたりの出力は、結果に置か鉱山mod100,000,007プログラムの数を示します。
サンプル入力
2 22 000
サンプル出力
6 1
アイデア:3例(0,1,2)鉱山がある最初の行から開始
一つは過去に1つの列挙によって
限り、2行目の最初の列はまた、次を決定するために識別することができるようにあなたが決定することができる
私は2つの点をワ最後の一つは、<0または> 2鉱山が出破る入れて顔が現在存在しているかを決定、この時点で何の解決策(I> 3は注意を払っていない)がありませんしませんでした
コード:
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 #defineは長い長いっ の#define MOD 100000007 INT )(主 { int型I、J、N、M、T。 イオス:: sync_with_stdio(偽); cinを >> トン。 一方、(t-- ) { ストリングS。 cinを >> 秒; int型フラグ= 1 。 int型 [ 10005 ]; 用(i = 0 ; S [i]はiは++ ) { [I]= S [I] - ' 0 ' 。 もし([ 0 ]> 4)フラグ= 0 。 もし([I]> 6)フラグ= 0 。 } であれば(フラグ== 0 ) { COUT << 0 << ENDL。 続け; } int型の F [ 10005 ]、X [ 10005 ]。 int型のlen = s.size()、最後に、 LL合計 = 0 、ANS; にとって(J = 0 ; J <= 2、J ++ ) { memsetの(F、0、はsizeof(F)); // レイノルズ数置くため のmemset(X、0、はsizeof(X)の); //は、いくつかの鉱山を取る 最後J =; // 最初のレイ列 用(I = 0 ; IはLEN <; Iは++ ) { F [I] =最終; //を入れて IF(私は== 0)X [I] = A [I]を-f [I]; // また 他 X [I] = A [I] -f [I] -f [I- 1 ]; // また 最後=のX [i]は、 もし(最後の< 0 ||最後> 2)破ります。 } LL ANS = 0 。 もし(I == LEN && X [I- 1 ] == 0 ) { ANS = 1 。 用(i = 0 ; iがLEN <; iは++)場合(F [I] == 1)ANS = ANS * 2%のMOD。 } 和 = ANS%のMOD +和%MOD。 } coutの<<和%モッズ<< ENDL。 } }