匹配串aaaaaa
模板串aa
然後只算出現3次。
這樣的話,只要在find函式修改一行就行了
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表示是否有匹配成功的
templatebool find(t text, int lent, t pattern, int lenp, int next, vector&ret)//下標皆為從0開始
} return ret.size();
}vectorans;
int nxt[1000010];
char pattern[1000010], text[1000010];
void doit()
{ int lenp = strlen(pattern);
int pos = nxt[lenp];
int cir = lenp - pos;
if (cir == lenp) cout<< cir <
剪花布條 hdu 2087(kmp模板題)
一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中盡可能剪出幾塊小飾條來呢?input 輸入中含有一些資料,分別是成對出現的花布條和小飾條,其布條都是用可見ascii字元表示的,可見的ascii字元有多少個,布條的花紋也有多少種花樣。...
剪花布條 HDU 2087 KMP模板題
題意 2個字串a,b.問a中有多少個字串b.input 輸入中含有一些資料,分別是成對出現a,b a和b不會超過1000個字元。如果遇見 字元,則表示測試結束。output 輸出b的個數,每個結果之間應換行。kmp模板題 include include include include include...
Hdu 2087 kmp演算法的運用
description 一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中盡可能剪出幾塊小飾條來呢?input 輸入中含有一些資料,分別是成對出現的花布條和小飾條,其布條都是用可見ascii字元表示的,可見的ascii字元有多少個,布...