九度 1482 瑪雅人的密碼

2021-08-07 16:50:56 字數 971 閱讀 3173

瑪雅人有一種密碼,如果字串中出現連續的2012四個數字就能解開密碼。給乙個長度為n的字串,(2<= n <=13)該字串中只含有0,1,2三種數字,問這個字串要移位幾次才能解開密碼,每次只能移動相鄰的兩個數字。例如02120經過一次移位,可以得到20120,01220,02210,02102,其中20120符合要求,因此輸出為1.如果無論移位多少次都解不開密碼,輸出-1。

思路:這題明顯資料量不大,可以用bfs做。但是有一些地方需要注意。

1.這個bfs和之前寫過的開密碼鎖的類似,搜尋的方向,也就是狀態轉移有好多種,需要依次遍歷。

2.這個的位數有13位,不能開乙個10e13的陣列,會超空間。因為每個數都是0 1 2,所以可以狀態壓縮,將三進製轉變成十進位制,也可以用map來存,使用find(),如果找不到,就返回map.end()這個功能。

3.遇到輸入string的題,就直接cin吧,而且cin string型別的時候需要include string。

**如下:

#include 

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

string s;

mapint ans;

struct state

};int isok(string s)

return0;}

void bfs(state start)

for (int i = 1; i < first.s.length(); i++)}}

}int main()

bfs(state(s, 0));

printf("%d\n", ans);

}return

0;}

題目1482 瑪雅人的密碼

題目描述 瑪雅人有一種密碼,如果字串中出現連續的2012四個數字就能解開密碼。給乙個長度為n的字串,2 輸入 輸入包含多組測試資料,每組測試資料由兩行組成。第一行為乙個整數n,代表字串的長度 2 n 13 第二行為乙個僅由0 1 2組成的,長度為n的字串。輸出 對於每組測試資料,若可以解出密碼,輸出...

九度 清華2012 瑪雅人的密碼

題目鏈結 說實話,看到這個題目完全沒有思路,所以去看了很多 都是說用廣搜,但是自己還是想了很久,然後看懂了學長的 照著抄理解了下。然後意識到,真的是學的東西完全不會用,所以決定要努力,從現在開始也不晚。include include include include includeusing name...

瑪雅人的密碼

瑪雅人有一種密碼,如果字串中出現連續的2012四個數字就能解開密碼。給乙個長度為n的字串,2 輸入包含多組測試資料,每組測試資料由兩行組成。第一行為乙個整數n,代表字串的長度 2 n 13 第二行為乙個僅由0 1 2組成的,長度為n的字串。對於每組測試資料,若可以解出密碼,輸出最少的移位次數 否則輸...