想法的来源!!!!!!
不懂kmp?请看上面的链接,附上一道模板题 洛谷P3375
这是一道kmp(mp?我也分不清)的模板题(紫书上好像有类似的模板),思路很清楚,下面放出代码
解题
#include <bits/stdc++.h>
#include <ctime>
using namespace std;
clock_t _timer_start,_timer_end;
void start_timer(){
_timer_start=clock();
}
void stop_timer(){
_timer_end=clock();
double dur=(double)(_timer_end-_timer_start);
printf("Time Consume:%lf second\n", dur/CLOCKS_PER_SEC);
}
/*--------------------------------------------------------*/
/*--------------------------------------------------------*/
char src[101010],pattern[101010];
int fail[101010];
void calc_fail(){
fail[0]=0;
int len=strlen(pattern+1);
int k=0;
for(int i=1;i<=len;i++){
while(k && pattern[i]!=pattern[k])k=fail[k];
//下面这一行的有无不影响程序的正确性
//while(k && pattern[i+1]==pattern[k])k=fail[k];
fail[i+1]= pattern[i]==pattern[k]?++k:0;
}
}
long long jump=0;
long long ans=0;
void solve(){