ZOJ 3587 擴充套件KMP

2021-06-25 19:13:12 字數 1026 閱讀 7506

思路:這題確實大帝做得很機智!字串先求最長字首,反的字串再求一次最長字首,然後就可以搞了。

每個子串出現的次數就是最長字首的次數嘛!

#pragma comment(linker, "/stack:1024000000,1024000000")

#include#include#include#include#include#include#include#include#include#define mem(a,b) memset(a,b,sizeof(a))

#define lson i<<1,l,mid

#define rson i<<1|1,mid+1,r

#define llson j<<1,l,mid

#define rrson j<<1|1,mid+1,r

#define inf 0x7fffffff

#define maxn 100005

typedef long long ll;

typedef unsigned long long ull;

using namespace std;

void ekmp(char *s,char *t,ll *next,ll *extend)//s為主串,t為模版串

{ int i,j,p,l;

int len=strlen(t);

int len1=strlen(s);

memset(next,0,sizeof(next));

memset(extend,0,sizeof(extend));

next[0]=len;

j=0;

while(1+j=1;i--)

sum[i]+=sum[i+1];

reverse(s,s+len1);

reverse(t,t+len2);

ekmp(s,t,next,extend);

for(int i=0;i=1;i--)

sum1[i]+=sum1[i+1];

ll ans=0;

for(int i=1;i

ZOJ 3587 擴充套件KMP

思路 這題確實大帝做得非常機智!字串先求最長字首,反的字串再求一次最長字首。然後就能夠搞了。每乙個子串出現的次數就是最長字首的次數嘛!pragma comment linker,stack 1024000000,1024000000 include include include include i...

KMP 擴充套件KMP

本文將不斷加入例題,稍安勿躁,今天的總結爭取9 30寫完.kmp,中文名字叫字串匹配,用於解決一類字串匹配問題.先下一些定義 首先我們先想一想 nxt i 對於求解問題有怎樣的幫助.我們對於每乙個 t i s 1 的位置都匹配一次,這樣子複雜度為 theta n m 的.考慮在暴力匹配中其實我們不一...

擴充套件kmp

出自 2 i k l 1 p k,即i l p。這時,首先可以知道a i.p 和b 0.p i 是相等的 因為a i.p b i k.p k 而i k l 1 p k,由b 0.l 1 b i k.i k l 1 可得b 0.p i b i k.p k 即a i.p b 0.p i 然後,對於a p...