聰明的打字員

2021-07-23 09:52:26 字數 1538 閱讀 4504

【題目描述】

阿蘭是某機密部門的打字員,她現在接到乙個任務:需要在一天之內輸入幾百個長度固定為6的密碼。當然,她希望輸入的過程中敲擊鍵盤的總次數越少越好。

不幸的是,出於保密的需要,該部門用於輸入密碼的鍵盤是特殊設計的,鍵盤上沒有數字鍵,而只有以下六個鍵:swap0, swap1, up, down, left, right,為了說明這6個鍵的作用,我們先定義錄入區的6個位置的編號,從左至右依次為1,2,3,4,5,6。下面列出每個鍵的作用:

swap0:按swap0,游標位置不變,將游標所在位置的數字與錄入區的1號位置的數字(左起第乙個數字)交換。如果游標已經處在錄入區的1號位置,則按swap0鍵之後,錄入區的數字不變;

swap1:按swap1,游標位置不變,將游標所在位置的數字與錄入區的6號位置的數字(左起第六個數字)交換。如果游標已經處在錄入區的6號位置,則按swap1鍵之後,錄入區的數字不變;

up:按up,游標位置不變,將游標所在位置的數字加1(除非該數字是9)。例如,如果游標所在位置的數字為2,按up之後,該處的數字變為3;如果該處數字為9,則按up之後,數字不變,游標位置也不變;

down:按down,游標位置不變,將游標所在位置的數字減1(除非該數字是0),如果該處數字為0,則按down之後,數字不變,游標位置也不變;

left:按left,游標左移乙個位置,如果游標已經在錄入區的1號位置(左起第乙個位置)上,則游標不動;

right:按right,游標右移乙個位置,如果游標已經在錄入區的6號位置(左起第六個位置)上,則游標不動。

當然,為了使這樣的鍵盤發揮作用,每次錄入密碼之前,錄入區總會隨機出現乙個長度為6的初始密碼,而且游標固定出現在1號位置上。當巧妙地使用上述六個特殊鍵之後,可以得到目標密碼,這時游標允許停在任何乙個位置。

現在,阿蘭需要你的幫助,編寫乙個程式,求出錄入乙個密碼需要的最少的擊鍵次數。

【輸入描述】

檔案僅一行,含有兩個長度為6的數,前者為初始密碼,後者為目標密碼,兩個密碼之間用乙個空格隔開。

【輸出描述】

檔案僅一行,含有乙個正整數,為最少需要的擊鍵次數。

【樣例輸入】

123456

654321

【樣例輸出】

11

【資料範圍及提示】

時間限制應該是8s。

初始密碼是123456,游標停在數字1上。對應上述最少擊鍵次數的擊鍵序列為:

擊鍵序列:

擊鍵後的錄入區

(下劃線表示游標所在位置)

123456

swap1

623451

right

623451

swap0

263451

down

253451

right

253451

up254451

right

254451

down

254351

right

254351 up

254361

swap0

654321

最少的擊鍵次數為11。

聰明的打字員

正解太妙了 將6 66位上的數字壓縮成乙個int intin t,然後雙向 bfs bfsbf s 爆搜即可,卡卡常數勉強過去 由於 十分簡單,所以就不 想 打注釋了 include include include include include include using namespace st...

聰明的打字員

題目描述 阿蘭是某機密部門的打字員,她現在接到乙個任務 需要在一天之內輸入幾百個長度固定為6的密碼。當然,她希望輸入的過程中敲擊鍵盤的總次數越少越好。不幸的是,出於保密的需要,該部門用於輸入密碼的鍵盤是特殊設計的,鍵盤上沒有數字鍵,而只有以下六個鍵 swap0,swap1,up,down,left,...

POJ 1184 聰明的打字員

簡直難到沒朋友。雙向bfs 剪枝。剪枝策略 對於2 5位置上的數,僅僅有當游標在相應位置時通過swap up。down來改變。那麼當當前位置沒有達到目標狀態時,left和right無意義。好了。僅僅剪掉這裡就過掉了。還有比較炫酷的方法實現列舉720種排列。然後狀壓什麼的。功力不夠全然看不懂。incl...