欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

1465:【例题1】剪花布条

时间:2024-06-15 22:38 作者:admin 点击:
#includebits/stdc++.husing namespace std;string s="abababc",t="aba";int nt[10000000];//vectorintvoid getnext(string t){nt[0]=-1;int i=0,j=nt[i];while(i=t.length())if(j==-1||t[i]==t[j]) nt[++i]=++j;else j=nt[j];}int find(string s,string t){i
#include<bits/stdc++.h>
using namespace std;
string s="abababc",t="aba";
int nt[10000000];//vector<int>
void getnext(string t){
	nt[0]=-1;
	int i=0,j=nt[i];
	while(i<=t.length())
		if(j==-1||t[i]==t[j]) nt[++i]=++j;
		else j=nt[j];
}
int find(string s,string t){
	int i=0,j=0;
	int ans=0;
	while(i<s.size()){
		while(j!=0&&s[i]!=t[j]) j=nt[j];
		if(s[i]==t[j]) j++;
		if(j==t.size()){
			ans++;
			j=0;
		}
		i++;
	}
	return ans;
}
int main(){
	while(true){
		cin>>s;
		if(s=="#") break;
		cin>>t;
		getnext(t);
		cout<<find(s,t)<<endl;
	}
	return 0;
}


(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%