題目
原題傳送門
由於某種不可告人的原因,沒法複製原題,一複製就說我非原創……
哎╮(╯▽╰)╭
思路
誒,和八數碼好像!
這題那麼多人過!
大法好!
輕鬆bfs水過
由於限制爲步,完美超時。
想來想去,又用了搜索。
嘿嘿嘿,好像沒得問題
輕鬆A*水過
再次因爲步,完美超時。
120步這個老東西。
於是,萬般無奈,試了試純判斷和。
15宮格,是個奇數。
那麼我們累加每個數的逆序對數目,加上0到終態的曼哈頓距離,奇數則有解,偶數無解。
不可能過的
過了……
好吧,步是迷惑人的。
一個數碼問題,最多走步,不需要想步。 來自:
沃茨基dls晚上講題。
好吧,上代碼。
代碼
#include <bits/stdc++.h>
using namespace std;
int a[101010];
int main() {
int T; scanf("%d", &T);
while (T--) {
int ans = 0;
for (int i = 0; i < 16; i++) {
scanf("%d", &a[i]);
if (!a[i]) ans += 6 - i/4 - i%4;
for (int j = 0; j < i; j++)
if (a[j] > a[i]) ans++;
}
if (ans & 1) puts("Yes");
else puts("No");
}
return 0;
}