問題の説明
あなたは、15数個の細胞および空のセルから成る4×4のグリッドを、与えられています。
すべての番号は一意であり、1から15までの範囲であった
。この基板において、空のセルと隣接するセルが空のセルに移動することができます。
あなたの仕事は、下図に示すターゲットグリッドに入力グリッドを作ることです。
次の例(サンプル入力)では、次の2つの動きでターゲットグリッドを得ることができます。
すべての番号は一意であり、1から15までの範囲であった
。この基板において、空のセルと隣接するセルが空のセルに移動することができます。
あなたの仕事は、下図に示すターゲットグリッドに入力グリッドを作ることです。
次の例(サンプル入力)では、次の2つの動きでターゲットグリッドを得ることができます。
入力
最初の行は、テストケースの数を表す整数T(1 <= T <= 10 ^ 5)を含有します。
各テストケースは、4つのライン入力グリッドを表すそれぞれ含む4スペースで区切られた整数から成ります。0は空のセルを示しています。
各テストケースは、4つのライン入力グリッドを表すそれぞれ含む4スペースで区切られた整数から成ります。0は空のセルを示しています。
出力
各テストケースについて、あなたは1行で答えを印刷する必要があります。
あなたは120点の移動中に、ターゲットグリッドを得ることができない場合は、「いいえ」、他の印刷「はい」を印刷します。
あなたは120点の移動中に、ターゲットグリッドを得ることができない場合は、「いいえ」、他の印刷「はい」を印刷します。
サンプル入力
2 1 2 3 4 5 6 7 8 9 10 0 12 13 14 11 15 1 2 3 4 5 6 7 8 9 10 11 12 13 15 14 0
サンプル出力
はい・いいえ
結論:ジグソーパズル解ける問題:ブランクの又は逆の順序の数のパリティの現在の値を判断するかどうか、現在の行間隔のパリティ
コード:
#include <cstdioを> する#include <iostreamの> する#include <アルゴリズム> の#include <CStringの> する#include <キュー> の#include <スタック> の#include < セット > の#include <地図> の#include <ベクトル> の#include <cmath> const int型 MAXN = 1E5 + 5 。 typedefの長い長いLL。 使用して名前空間はstdを、 INT [ 25 ]。 INTの CC [ 25 ]。 INT のmain() { int型 T; CIN >> T; int型のk = 0 。 一方、(T-- ) { int型の CNT = 0 。 用(INT T = 0、T < 4 T ++; ) { ため(INT J = 0 ; J < 4 ; J ++ ) { scanf関数(" %のD "、&[T * 4 + J])。 もし [T *(4 + J]!= 0) { CC [CNTが ++] [T * = 4 + j]を。 } もし([T * 4 + J] == 0 ) { K = T。 } } } int型の和= 0 。 用(int型 T = 0、T < 15 ; T ++ ) { ため(INT J = T + 1、J < 15 ; J ++ ) { 場合(CC [J] <CC [T]) { 合計 ++ 。 } } } もし、(((3 -k)%2)^(合計%2)== 0 ) { プット(" はい" ); } 他 { プット(「なし」)。 } } 戻り 0 。 }