聰明的打字員

2022-02-26 14:42:00 字數 1513 閱讀 3163

【題目描述】

阿蘭是某機密部門的打字員,她現在接到乙個任務:需要在一天之內輸入幾百個長度固定為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

up254361

swap0

654321

最少的擊鍵次數為11。

聰明的打字員

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

聰明的打字員

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

POJ 1184 聰明的打字員

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