大佬帮蒟蒻看一下用KMP为什么WA了
查看原帖
大佬帮蒟蒻看一下用KMP为什么WA了
638336
Defoliation楼主2022/7/28 16:13
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=5e5+5,maxx=1e6+5;
int q,n,m,nxt[maxx];
long long ans;
string s;
vector<string>a[maxn];
inline void GetNext(string s2){ 
	int len=s2.size();
	int i=0,j=-1; 
	nxt[0]=-1; 
	while(i<len){ 
		if(j==-1||s2[i]==s2[j]){
			i++;
			j++; 
			if(s2[i]!=s2[j]) nxt[i]=j;
			else nxt[i]=nxt[j]; 
		} 
		else j=nxt[j]; 
	} 	
} 
inline long long kmp(string s1,string s2){ 
	long long cnt=0;
	GetNext(s2);
	int lens1=s1.size(),lens2=s2.size(); 
	int i=0,j=0;
	while(i<lens1){ 
		while(i<lens1&&j<lens2){ 
			if(j==-1||s1[i]==s2[j]){ 
				i++;
				j++;
			} 
			else j=nxt[j]; 
		} 
		if(j==lens2){
			cnt++;
			j=0;
		}
	}
	return cnt;  
} 
int main(){
	ios::sync_with_stdio(false);
	cin>>q;
	int i=0;
	while(++i<=q){
		cin>>n>>m>>s;
		if(n==1){
			for(int j=0;j<a[m].size();j++)
				a[i].push_back(a[m][j]);
			a[i].push_back(s);
		}
		else{
			ans=0;
			if(m==0) cout<<0<<endl;
			else{
				for(int j=0;j<a[m].size();j++)
					a[i].push_back(a[m][j]);
				for(int j=0;j<a[m].size();j++)
					ans+=kmp(s,a[m][j]);
				cout<<ans<<endl;
			}
		}
	}
	return 0;
}


2022/7/28 16:13
加载中...