請趕快離開,因為他太懂怎麼洗牌了。
給定一副有 $n$ 張的撲克牌堆 $A$,從牌堆上而下分別點數為 $A_1,A_2,...,A_n$,進行以下步驟:
1. 若牌堆剩一張牌,停止操作。(本次操作不算切牌)
2. 反之,可從下列兩種操作選擇一種:
- 將牌堆分為上下兩堆 $x$ 與 $y$,並且將 $y$ 疊到 $x$ 上,也就是切牌。
- 將牌堆分為上下兩堆 $x$ 與 $y$,但不做切牌。
接著,將 $x$ 與 $y$ 分別視作獨立的牌堆,重複步驟 1.。
給定另一副有 $n$ 張的撲克牌堆 $B$,並且給你從牌堆上而下的點數 $B_1,B_2,B_3,...,B_n$,一位成熟的程式設計師應該用最少的切牌次數就將 $A$ 洗到與 $B$ 的點數排列完全相同,這樣才能好好地出老千。tree 也是一位程式設計師,但他並不成熟,請你幫幫他算出最少要切幾次牌吧!
第一行有一數 $T$,代表有 $T$ 組測資,每組測資間會換行。
對於每組測資:
第一行有一數 $n$,代表這副撲克牌有 $n$ 張。
第二行有 $n$ 個數,分別代表 $A_1,A_2,...,A_n$
第三行有 $n$ 個數,分別代表 $B_1,B_2,...,B_n$
對於每組測資,輸出一數,代表要切幾次牌才能得到目標牌堆。
若怎麼切牌都無法得到目標牌堆,輸出 $-1$。
每組測資間要換行。
3 5 1 2 3 4 5 4 5 2 3 1 8 1 2 3 4 2 3 2 4 4 2 4 2 3 2 3 1 4 1 2 3 4 3 1 4 2
2 3 -1
$Subtask\;1\quad(10\%)\;$$#00$:$n\leq 13,\;\forall A_i,A_i=i$
$Subtask\;2\quad(20\%)\;$$#01$:$n\leq 13$
$Subtask\;3\quad(30\%)\;$$#02$$\sim$$#03$:$n\leq 26$
$Subtask\;4\quad(40\%)\;$$#04$$\sim$$#05$:無特殊限制
對於所有測資,$1\leq T\leq 20$,$1\leq n\leq 52$,$\forall A_i,B_i,\;1\leq A_i,B_i\leq 13$
以第二筆範例測資為例:
初始牌堆 1 2 3 4 2 3 2 4
分為 1
與 2 3 4 2 3 2 4
,切牌得到 2 3 4 2 3 2 4 1
。
將 2 3 4 2 3 2 4
分為 2 3
與 4 2 3 2 4
,切牌得到 4 2 3 2 4 2 3
。
將 4 2 3 2 4
分為 4
與 2 3 2 4
,但不切牌。
將 2 3 2 4
分為 2 3
與 2 4
,切牌得到 2 4 2 3
。
後續操作都不要切牌並慢慢將牌堆分割到剩一張牌,停止操作並合併牌堆後得到 4 2 4 2 3 2 3 1
,期間共執行 $3$ 次切牌。
編號 | 身分 | 題目 | 主題 | 人氣 | 發表日期 |
沒有發現任何「解題報告」 |