链接:http://acm.hdu.edu.cn/showproblem.php?pid=6620
题意:T组样例。每组样例,给出一个4*4的矩阵来描述华容道,问能否在120步内完成它。
思路:有些排列的数字华容道是无解的。当逆序对个数的奇偶性和完成时空格所在行和初始时空格所在行的的差奇偶性相同时才有解。至于120步,我觉得这和逆序对的个数有关,因为逆序对个数最多也就有1+2+3+...+15=15*(1+15)/2=120个(其实不会有这么多),一步至少能消除一个逆序对,所以120步应该完全够用。真的证明我也不会,当时找到结论就莽了一发,就过了。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 20;
int a[N];
int main(void)
{
int t;
scanf("%d",&t);
while(t--)
{
int posr,ni=0;
for(int i=1;i<=16;i++)
{
scanf("%d",&a[i]);
if(!a[i]) posr=i/4+(i%4?1:0);
for(int j=1;j<i;j++)
{
if(!a[i]) continue;
if(a[j]>a[i])
ni++;
}
}
if((4-posr)%2==ni%2)
printf("Yes\n");
else printf("No\n");
}
return 0;
}