瑪雅人的密碼

2021-10-02 12:19:45 字數 848 閱讀 4050

題目描述

瑪雅人有一種密碼,如果字串**現連續的2012四個數字就能解開密碼。給乙個長度為n的字串,(2=輸入描述:

輸入包含多組測試資料,每組測試資料由兩行組成。

第一行為乙個整數n,代表字串的長度(2<=n<=13)。

第二行為乙個僅由0、1、2組成的,長度為n的字串。

輸出描述:

對於每組測試資料,若可以解出密碼,輸出最少的移位次數;否則輸出-1。

示例1輸入

502120輸出1

題目個人理解:交換相鄰的字元,02120交換一次是20120,01220,02210,02102,再將第一次交換後的結果再交換一次,20120交換後是02120,21020,20210,20102。所以需要記錄每次交換後的結果,未找到時,在交換的基礎上再進行交換,直至找到。

注:1,第二次交換02120已經測試過未出現,所以不需要再進行記錄。

2,**中使用佇列queue進行儲存交換後的字串

3,**中的pair是map中定義的方法,是將兩種元素作為一種合成元素,新增方法有兩種:pair(「abc」,5)或make_pair(「abc」,5)

具體請看**:

#include

#include

#include

#include

#include

#include

using namespace std;

intchangepassword

(string str)

else}}

}return-1

;}intmain()

return0;

}

瑪雅人的密碼

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

瑪雅人的密碼

瑪雅人有一種密碼,如果字串 現連續的2012四個數字就能解開密碼。給乙個長度為n的字串,2 示例1 複製5 02120複製 1思路 自己用dfs寫的只過了60 看了看題解是用bfs 做的,真香 首先將字串 str 看做根節點,交換一次的字串作為第二層,以此類推,直到出現有 2012 的字串,那麼它的...

瑪雅人的密碼bfs

如何用佇列廣度優先遍歷所有可能性 queue 如何判別並標示某串是否訪問過 map 如何記錄某串已經交換字元的次數 子串2012是否存在 include include include include include include using namespace std int count 3 t...