HDU 1711 裸KMP,附KMP模板

2021-07-16 22:19:07 字數 1687 閱讀 3849

//pattern為模板串,從0下標,長度為len。 返回next陣列

templatevoid kmp_pre(t pattern, int len, int next)

}//text為匹配串,lent為其長度。pattern為模板串,lenp為其長度,next為上面得到的next陣列。

//返回乙個vector,表示所有匹配成功的在text的下標(從0開始)

//還返回乙個true/false表示是否有匹配成功的

vectorret;

templatebool find(t text, int lent, t pattern, int lenp, int next, vector&ret)//下標皆為從0開始

} return ret.size();

}

上述為模板

ac code

#include #include #include #include using std::tr1::unordered_map;

/*#include #include #include #include #include #include using namespace std;

*/using std::sort;

using std::bitset;

using std::max;

using std::cout;

using std::stack;

using std::cin;

using std::endl;

using std::swap;

using std::pair;

using std::vector;

using std::set;

using std::map;

using std::multiset;

using std::queue;

using std::greater;

using std::string;

using std::priority_queue;

using std::max_element;

using std::min_element;

using __gnu_pbds::pairing_heap_tag;

__gnu_pbds::priority_queue, pairing_heap_tag> heap;

#define hash unordered_map

#define pr(x) cout<<#x<<" = "}//text為匹配串,lent為其長度。pattern為模板串,lenp為其長度,next為上面得到的next陣列。

//返回乙個vector,表示所有匹配成功的在text的下標(從0開始)

//還返回乙個true/false表示是否有匹配成功的

vectorret;

templatebool find(t text, int lent, t pattern, int lenp, int next, vector&ret)//下標皆為從0開始

} return ret.size();

}int pattern[10010], text[1000010], nxt[10010];

void init()

int main()

return 0;

}

1015 KMP演算法 裸kmp

第一行乙個整數n,表示測試資料組數。接下來的n 2行,每兩行表示乙個測試資料。在每乙個測試資料中,第一行為模式串,由不超過10 4個大寫字母組成,第二行為原串,由不超過10 6個大寫字母組成。其中n 20 對於每乙個測試資料,按照它們在輸入中出現的順序輸出一行ans,表示模式串在原串中出現的次數。i...

HDU 2087 減花布條 裸KMP模板

中文題面,題意也說得非常清楚了,給乙個文字串,求文字串中有多少個不重複的模式串 kmp標準做法,甚至基本沒有變動。判斷的時候,每當完整的匹配一次之後令j 0,ans 即模式串的下標從0開始,匹配數量加1 include include include include include include ...

hdu 4300(kmp或者拓展kmp)

題意 亂七八糟說了一大堆,就是先給你乙個長度26的字串,對應了abcd.xyz,這是乙個密碼表。然後給你乙個字串,這個字串是不完整的 完整的應該是前半部分是加密的,後半部分是解密了的 然而,給你的字串一定是加密的部分 一部分解密的部分 可以是全部,也可以是沒有 讓你求出最短的完整字串 解題思路 考慮...