2015 藍橋杯決賽 密文搜尋

2021-09-23 01:38:54 字數 1327 閱讀 2702

福爾摩斯從x星收到乙份資料,全部是小寫字母組成。

他的助手提供了另乙份資料:許多長度為8的密碼列表。

福爾摩斯發現,這些密碼是被打亂後隱藏在先前那份資料中的。

請你編寫乙個程式,從第乙份資料中搜尋可能隱藏密碼的位置。要考慮密碼的所有排列可能性。

資料格式:

輸入第一行:乙個字串s,全部由小寫字母組成,長度小於1024*1024

緊接著一行是乙個整數n,表示以下有n行密碼,1<=n<=1000

緊接著是n行字串,都是小寫字母組成,長度都為8

要求輸出:

乙個整數, 表示每行密碼的所有排列在s中匹配次數的總和。

例如:使用者輸入:

aaaabbbbaabbcccc

2aaaabbbb

abcabccc

則程式應該輸出:

4這是因為:第乙個密碼匹配了3次,第二個密碼匹配了1次,一共4次。

資源約定:

峰值記憶體消耗 < 512m

cpu消耗  < 3000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入...」 的多餘內容。

所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。

注意: main函式需要返回0

注意: 只使用ansi c/ansi c++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。

注意: 所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。

提交時,注意選擇所期望的編譯器型別。

這題因為原串的長度1e6,所有直接全排列密碼串再搜尋,1000個串肯定不行;

可以考慮把子串每8個位置,統計下26個字母的出現情況,再跟密碼串中26個字

母出現的情況對比一下,若各個字母出現數字相同則可以組成。最壞複雜度是

1e6 * 1e3 * 26, 時間三秒 可以飄過。

#include#include#includeusing namespace std;

int z[1010000][30];

int main()

} int n;

cin >> n;

for(int i = 1; i <= n; i++)

; for(int i = 0; i < len; i++) //統計密碼串中的字母情況

for(int j = 0; j < q; j++)

}cout << cnt << endl;

return 0;

}

藍橋杯2015決賽 密文搜尋

福爾摩斯從x星收到乙份資料,全部是小寫字母組成。他的助手提供了另乙份資料 許多長度為8的密碼列表。福爾摩斯發現,這些密碼是被打亂後隱藏在先前那份資料中的。請你編寫乙個程式,從第乙份資料中搜尋可能隱藏密碼的位置。要考慮密碼的所有排列可能性。輸入輸入第一行 乙個字串s,全部由小寫字母組成,長度小於102...

藍橋杯2015決賽 密文搜尋

題目描述 福爾摩斯從x星收到乙份資料,全部是小寫字母組成。他的助手提供了另乙份資料 許多長度為8的密碼列表。福爾摩斯發現,這些密碼是被打亂後隱藏在先前那份資料中的。請你編寫乙個程式,從第乙份資料中搜尋可能隱藏密碼的位置。要考慮密碼的所有排列可能性。輸入輸入第一行 乙個字串s,全部由小寫字母組成,長度...

藍橋杯 2015決賽 密文搜尋 (map)

福爾摩斯從x星收到乙份資料,全部是小寫字母組成。他的助手提供了另乙份資料 許多長度為8的密碼列表。福爾摩斯發現,這些密碼是被打亂後隱藏在先前那份資料中的。請你編寫乙個程式,從第乙份資料中搜尋可能隱藏密碼的位置。要考慮密碼的所有排列可能性。輸入第一行 乙個字串s,全部由小寫字母組成,長度小於1024 ...