冒險家(八數碼問題)

2022-09-09 00:36:24 字數 1733 閱讀 8834

這題是翻譯了八數碼問題(poj — 2893),然後稍加修改。

description

小d在地下世界探索時,找到了一座藏有無數奇珍異寶的王國,可是進入王國有一扇門,當且僅當你將門上的矩陣變成國王心中的完美矩陣時,大門方可開啟。一向不喜歡數字的小d傻眼了,現求助於你,請你幫助他看他是否能進入王國,獲得奇珍異寶。

規則如下:

給定乙個mn的矩陣(m和n其中必有乙個奇數),矩陣上滑貼的編號為1 – (m n – 1),請你通過移動滑板(滑板在矩陣中用0表示),在不越界的情況下可上下左右移動。請你判斷通過變換它是否能變成乙個國王心中的順序矩陣

例:乙個3*3的順序矩陣如下:

1 2 3

4 5 6

7 8 0

input

多組輸入。第一行為兩個整數m和n,當m和n同時為0程式結束。(1 <= m,n <= 1000),接下來是乙個m*n的矩陣。

output

輸出只有一行,如果小d能進入王國獲得奇珍異寶請輸出yes,否則輸出no;

每兩組輸出之間空一行

思路:

參考八數碼有解情況,可得出如下結論:

兩個矩陣的線性陣列的逆序對的奇偶相同時,它們其中乙個可以通過相鄰元素之間的交換變成另外乙個,前提是列數為奇數;若列數不為奇數

則需判斷空格位置的豎直距離對2取餘與逆序對數目對2取餘的情況。

順序矩陣逆序對為0,是偶數

//由於資料量較大,建議使用快讀加快寫入資料

愉快ac

#include#include#define ll long long

const ll maxn = 1e6 + 5;

ll t;

ll ans = 0;

ll a[maxn], b[maxn];

templateinline void read(t& res)

void merge(ll sourcearr, ll temparr, ll startindex, ll midindex, ll endindex)

while (i != midindex + 1)

temparr[k++] = sourcearr[i++];

while (j != endindex + 1)

temparr[k++] = sourcearr[j++];

for (i = startindex; i <= endindex; i++)

sourcearr[i] = temparr[i];

}//內部使用遞迴

void mergesort(ll sourcearr, ll temparr, ll startindex, ll endindex)

int main()

} mergesort(a, b, 0, t - 1);

//列數是奇數

if (ans % 2 == 0 && n % 2 == 1)

printf("yes\n");

//列數是偶數

else if (n % 2 == 0 && ans % 2 == (m - 1 - y) % 2)

printf("yes\n");

else

printf("no\n");

is_num++;

} return 0;

}

林肯冒險家深受消費者如潮好評

林肯一直是美式豪華的典型代表,旗下的產品憑藉優雅而前衛的設計,不斷地重新整理各個級別產品的衡量標準,也在各級別對手中制定了全新的 遊戲規則 而林肯於近期推出的全新林肯冒險家便是最好的證明。林肯首款國產車型 豪 不妥協的美式豪華suv全新林肯冒險家corsair一經上市,就在豪華suv市場掀起了一股熱...

林肯冒險家 多重禮遇讓你用車無憂

林肯一直是美式豪華的典型代表,旗下的產品憑藉優雅而前衛的設計,不斷地重新整理各個級別產品的衡量標準,也在各程式設計客棧級別對手中制定了全新的 遊戲規則 而林肯於近期推出的全新林肯冒險家便是最好的證明。林肯首款國產車型 豪 不妥協的美式豪華suv全新林肯冒險家corsairwww.cppcns.com...

林肯冒險家 收放自如 暢享澎湃動力

全新林肯冒險家corsair完美詮釋了林肯 靜謐之旅 產品設計理念,以標配50項豪華配置展現出 豪 不妥協的產品內涵,更通過全面的智慧型互聯科技伴您勇敢去開創一片屬於自己程式設計客棧的天地。真程式設計客棧 無鑰匙 進入手機助你睿智出行 全新林肯冒險家corsair配備的phone a程式設計客棧s ...