藍橋杯 2015 決賽 C B(4)密文搜尋

2021-08-20 04:37:16 字數 1448 閱讀 6214

福爾摩斯從x星收到乙份資料,全部是小寫字母組成。 他的助手提供了另乙份資料:許多長度為8的密碼列表。 

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

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

輸入第一行:乙個字串s,全部由小寫字母組成,長度小於1024*1024 緊接著一行是乙個整數n,表示以下有n行密碼,1<=n<=1000 

緊接著是n行字串,都是小寫字母組成,長度都為8 要求輸出: 乙個整數, 表示每行密碼的所有排列在s中匹配次數的總和。

例如: 使用者輸入: aaaabbbbaabbcccc 2 aaaabbbb abcabccc 則程式應該輸出: 4 

這是因為:第乙個密碼匹配了3次,第二個密碼匹配了1次,一共4次。 資源約定: 峰值記憶體消耗 < 512m cpu消耗 < 3000ms 

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。 所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。 注意: 

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

所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。 提交時,注意選擇所期望的編譯器型別。

思路:對給定的字串 進行全排列,然後利用find函式查詢是否包含在str內部

不知道會不會超時。。。

#include#include#includeusing namespace std; 

int tol = 0;

string str,p;

bool check(string a, int k, int i)

}return true;

}void perm(string a,int k, int m)

cout <> str;

scanf("%d",&n);

int kcase = 0;

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

cout << tol 《題目因為密碼可以全排列,但是不可以中間間隔。故可以統計連續8位字元,對照密碼,看各字元出現次數是否一致。

code:

#include#includeusing namespace std;

const int n = 1e6+1e5;

int a[n][30];

int b[30];

int main()

}scanf("%d",&n);

int ans = 0;

while(n--)

for(int i = 0; i <= len-8; ++i)

}if(ok) ++ans;

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

return 0;

}

2015 藍橋杯決賽 密文搜尋

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

藍橋杯2015決賽 密文搜尋

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

藍橋杯2015決賽 密文搜尋

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