奇數碼問題(求證明)

2021-10-08 17:34:15 字數 2296 閱讀 1762

題意

艹,推逆序對推錯了,艹

咳咳,依舊是兩種做法。

考慮把整個圖化成一條數列。(第二行拼到第一行後面,以此類推)

考慮整個圖的逆序對數(0

00也考慮上)。

左右交換會使逆序對數+/−

1+/-1

+/−1

,那麼上下交換呢?

由於0

00比所有數字都要小,所以肯定會+−n

+-n+−

n 那麼x

xx在數列和中間的n−1

n-1n−

1個數字會產生多少個逆序對數呢,假設少了q

qq個逆序對,多了p

pp個逆序對?

那麼q +p

q+pq+

p為偶數,p−q

p-qp−

q必定為偶數,又因為n

nn為奇數,所以上下交換也是乙個奇數。

那豈不是意味著每次交換逆序對數就會改變,那拿什麼判斷呢?

但是不難發現0

00的移動也是個奇數,兩個一加就是偶數,所以只需要把整個圖的逆序對數加上0

00的位置即可。

但是至於為什麼奇偶性質相同一定能到達,我也不知道,求證明。

#include

#include

#define n 510000

using

namespace std;

int bst[n]

;int a[n]

,b[n]

,nn;

inline

intlowbit

(int x)

void

ins(

int x)

}int

findans

(int x)

return ans;

}int n;

intmain()

t+=n;}

for(

int i=

1;i<=nn;i++

)memset

(bst,0,

sizeof

(bst));

t=0;

for(

int i=

1;i<=n;i++)

t+=n;}

for(

int i=

1;i<=nn;i++)if

((an1&1)

==(an2&1)

)printf

("tak\n");

else

printf

("nie\n");

}return0;

}

參考

判斷忽略0

00之後的逆序對數是否相同,相同則可以到達,反之不能。

推法和上面差不多,我就不說了。

奇數碼問題

你一定玩過八數碼遊戲,它實際上是在乙個3 3的網格中進行的,1個空格和1 8這8個數字恰好不重不漏地分布在這3 3的網格中。例如 528 13 46 7在遊戲過程中,可以把空格與其上 下 左 右四個方向之一的數字交換 如果存在 例如在上例中,空格可與左 上 下面的數字交換,分別變成 528 52 5...

奇數碼問題

題目描述 你一定玩過八數碼遊戲,它實際上是在乙個3 3的網格中進行的,1個空格和1 8這8個數字恰好不重不漏地分布在這3 3的網格中。例如 5 2 8 1 3 4 6 7 在遊戲過程中,可以把空格與其上 下 左 右四個方向之一的數字交換 如果存在 例如在上例中,空格可與左 上 下面的數字交換,分別變...

108 奇數碼問題

類似我們小時候玩過的數字華容道,就是有乙個缺的然後可以移動變成不同的樣子,本題要你解決的是從狀態一能否通過移動變到狀態二。一開始拿到題一看這不就八數碼公升級版嗎,然後改了下八數碼 t了,其實結論做法很簡單,但是如果沒做過類似的題,可能想不到這裡去,這道題需要用奇偶性。奇偶性很神奇,對於一類問題,如果...