12F 數字變換

2022-08-01 06:09:13 字數 1528 閱讀 5595

總時間限制: 

1000ms

記憶體限制: 

65536kb

描述給定乙個包含5個數字(0-9)的字串,例如 「02943」,請將「12345」變換到它。 你可以採取3種操作進行變換

1. 交換相鄰的兩個數字

2. 將乙個數字加1。如果加1後大於9,則變為0

3. 將乙個數字加倍。如果加倍後大於9,則將其變為加倍後的結果除以10的餘數。

最多只能用第2種操作3次,第3種操作2次 求最少經過多少次操作可以完成變換。

輸入有最多 100,000 組資料

每組資料就是包含5個數字的字串

輸出對每組資料,輸出將"12345"變換到給定字串所需要的最少操作步數。如果無法變換成功,輸出-1

樣例輸入

12435

99999

12374

樣例輸出

1

-13

提示

由於測試資料太多,如果對每組資料都從頭進行搜尋,就會超時。

建議先做預處理,即以「12345」作為初始狀態做一遍徹底的廣搜,找出「12345」經合法變換能夠到達的所有字串,並記錄到達這些字串各需要多少步操作。

然後對讀入的每組資料,在上述預處理記錄的結果中進行查詢即可。

**guo wei

1 #include2 #include

3 #include4 #include5 #include6

using

namespace

std;

7char a[6] = "

12345";

8bool vis[100000][4][3];9

int ans[100000

];10

struct

node;

14};

15 queueq;

16int

main()

35 swap(temp[i], temp[i+1

]);36}37

//第二種操作

38if(no.op2<3)49

}50} 51

52//

第三種操作

53if(no.op3<2)64

}65}66

}67while(cin>>a)

70return0;

71 }

備註:睡前能用兩次就過了這道題很開心!!!wa是因為vis陣列初始化成了-1 orz 之前還犯過的錯誤是,temp沒有及時在每個迴圈的開頭重置成a。

最開始思考了一下,用什麼來定義狀態,記錄已經進行了哪些操作嗎?好像沒法記……然後想到,每個數最大就99999,可以把數字定義為狀態啊。另外,因為操作二和操作三都有次數限制,所以這個次數也要納入維度裡,所以就用乙個三維vis陣列來記錄狀態就可以了。

這道題獲得的啟發就是,不要慫,搜就行了,反正一共就考那麼幾種演算法,不是動規就是考bfs就是dfs,要不然就是神奇模擬,也沒有複雜演算法!!

經常犯錯的地方無非就是初始化、重置、清零之類的地方,檢查的時候要注意。

F 數字乘積

傳送門 這道題我一直wa 下來問了一下別人結果發現個位數我們就直接輸出n就行了 不需要輸出n 10 n 我就是乙個菜雞 而且寫的遞迴函式的終止條件也不是很好 唉 include include include include include include include include inclu...

F1 F12功能使用

聯想筆記本鍵盤上的f1 f12怎樣用?key 按fn的鍵,再按f1 f12其中的鍵就可以用了。f1 如果你處在乙個選定的程式中而需要幫助,那麼請按下f1。如果現在不是處在任何程式中,而是處在資源管理器或桌面,那麼按下f1就會出現 windows的幫助程式。如果你正在對某個程式進行操作,而想得到win...

F12的簡單使用

chrome瀏覽器的開發者工具可通過f12快捷鍵開啟 1.調整開發者工具在頁面的顯示 2.檢查介面元素,裝置切換,網頁或終端 終端選擇 斷點檢視 3.可檢視不同手機的介面適配問題 4.如何打斷點 5.目標位置介面點選滑鼠右鍵,檢查,也可開啟開發者工具同時element元素,是選中目標元素。6.修改介...