字串(hash演算法完成)

2022-07-08 05:39:10 字數 776 閱讀 9974

給乙個字串t,問在字串t 中可以包含最多多少個不重疊的字串s。

字串中的每個字元為小寫或者大寫字母。

第一行輸入乙個字串s。

第二行輸入乙個字串t。

輸出一行,包括乙個整數表示答案。

abaabababa

【資料範圍】:

20%的資料,1<=字串t 長度<=20000, 1<=字串s 長度<=100;

100%的資料,1<=字串t 長度<=1000000, 1<=字串s 長度<=100000。

初看題目,發現可以用暴力,就是可以先用find函式找子串,再用erase刪除(不懂出門左轉找度娘),但只能騙20%分數,find函式用o(n),earse函式也要用o(n),暴力分分鐘tle。那如何解決,這裡就採用了hash演算法,求子串的hash值,再進行匹配,匹配成功的記錄,然後輸出

#include//萬能頭,不多加解釋

using namespace std;

string s,st;

long long hash1[1000007],sh,l,pow1=1,sum=0,ha1,ha2,hash2[1000009];//pow1記得1,否則平方時有可能爆0

void hs()

{

long long l=s.size();

for(int i=0;i這題也算是乙個小毒瘤了,首先在判斷子串是否相符的那一處for的範圍卡了很久,但也沒有拿滿,發現原來就只是mod1定義太小,容易重複。

如果覺得看懂了,出門右轉

題目與這題很像,但很多坑

字串(hash演算法完成)

給乙個字串t,問在字串t 中可以包含最多多少個不重疊的字串s。字串中的每個字元為小寫或者大寫字母。第一行輸入乙個字串s。第二行輸入乙個字串t。輸出一行,包括乙個整數表示答案。abaabababa 資料範圍 20 的資料,1 字串t 長度 20000,1 字串s 長度 100 100 的資料,1 字串...

演算法 字串hash

題目描述 很久很久以前,森林裡住著一群兔子。有一天,兔子們想要研究自己的 dna 序列。我們首先選取乙個好長好長的 dna 序列 小兔子是外星生物,dna 序列可能包含 26 個小寫英文本母 然後我們每次選擇兩個區間,詢問如果用兩個區間裡的 dna 序列分別生產出來兩隻兔子,這兩個兔子是否一模一樣。...

演算法 字串Hash

字串hash主要應用在 在長度為n的主串s中匹配長度為m的匹配串t,返回起始位置。通過字串hash函式把乙個任意長度的字串對映成乙個非負整數,並且其衝突概率為零。取一固定值p,把字串看作p進製數,並分配乙個大於0的數值,代表每種字元。一般來說,我們分配的數值都遠小於p。取一固定值m,求出p進製數對m...