问题虫洞:C - Just an Old Puzzle HDU - 6620
黑洞内窥:
给你一个4x4的数字华容道,,问你可不可以在120步之内还原。。。。。
思维光年:
队友老是觉得可以爆搜这道题,,,,
于是我们现场下载了一个<数字华容道>的app玩了一下,,
发现游戏里的华容道总是有解的,我也很绝望啊。
正确而富有理性的求解:
序列从左往右拿起。。
即,当逆序对个数的奇偶性和完成时 空格所在行和初始时 空格所在行的的差奇偶性相同时才有解
ACcode:
//#include<bits/stdc++.h>
#include <stdio.h>
#include <iostream>
#include<algorithm>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
#include <stdlib.h>
#include <cstring>
#include <string.h>
#include <string>
#include <math.h>
#include <sstream>
using namespace std;
typedef long long ll;
#define MAXN 10005
#define INF 0x3f3f3f3f//将近ll类型最大数的一半,而且乘2不会爆ll
const ll mod = 1000000007;
int a[20];
int main()
{
int t;
cin >> t;
while(t--)
{
int c, d=4, ans=0;
for(int i=1; i<=16; ++i)
{
scanf("%d", &a[i]);
if(a[i] == 0)
c = (i-1)/4 + 1;//空格所在行
}
for(int i=1; i<=16; ++i)
{
if(a[i])
for(int j=i+1; j<=16; ++j)
if(a[j])
if(a[i] > a[j]) //初始逆序数为ans,完成时为0
ans++;
}
if(ans%2 == (d-c)%2) puts("Yes");
else puts("No");
}
return 0;
}