#include<iostream>
using namespace std;
const int N=2002000;
int cnt=0;
int tire[N][27];
int have[N];
int ans=0;
void insert(string s)
{
int root=0;
for(int i=0;i<s.size();i++)
{
int x=s[i]-'a'+1;
if(tire[root][x]==0)
{
tire[root][x]=++cnt;
root=tire[root][x];
}
else root=tire[root][x];
have[root]++;ans++;
}
}
void find(string s)
{
int root=0;
for(int i=0;i<s.size();i++)
{
int x=s[i]-'a'+1;
if(tire[root][x]==0)
return;
else root=tire[root][x];
ans-=have[root];
have[root]=0;
}
}
int main()
{
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//ifstream s("input.txt");
//ofstream c("intput.txt");
int n,m;
string a,b;
cin>>n>>m>>a>>b;
for(int i=0;i<n;i++)
insert(a.substr(i));
for(int i=0;i<m;i++)
find(b.substr(i));
cout<<ans<<endl;
return 0;
}
H.小圆前辈的博弈(字典树) 长沙学院2021校赛
最新推荐文章于 2023-06-22 19:43:53 发布