數字華容道類數碼問題 之 HDU - 6620——Just an Old Puzzle

問題蟲洞: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;
}

 

發佈了165 篇原創文章 · 獲贊 35 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章