瑪雅人有一種密碼,如果字串中出現連續的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的字串。對於每組測試資料,若可以解出密碼,輸出最少的移位次數 否則輸...