#include "bits/stdc++.h"
#define int long long
using namespace std;
int k=131;
int power[1048576];
int hash1[100000],hash2[100000];
int ran1(int l,int r)
{
if(l==0)
return hash1[r];
return hash1[r]-hash1[l-1]*power[(r-l+1)];
}
int ran2(int l,int r)
{
if(l==0)
return hash2[r];
return hash2[r]-hash2[l-1]*power[(r-l+1)];
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t;
cin>>t;
power[0]=1;
for(int i=1;i<1048576;i++)
power[i]=power[i-1]*k;
while(t--)
{
string a,b;
cin>>a>>b;
int n=a.size(),m=b.size();
a=a+a;
memset(hash1,0,sizeof(hash1));
memset(hash2,0,sizeof(hash2));
hash1[0]=a[0];
hash2[0]=b[0];
for(int i=1;i<n*2;i++)
hash1[i]=hash1[i-1]*k+a[i];
for(int i=1;i<m;i++)
hash2[i]=hash2[i-1]*k+b[i];
map<int,int>mp;
for(int i=0;i<n;i++)
{
int k=ran1(i,i+n-1);
mp[k]++;
}
int ans=0;
for(int i=0;i+n-1<m;i++)
{
int x=ran2(i,i+n-1);
if(mp[x]!=0)
ans++;
}
cout<<ans<<'\n';
}
}
循环位弈
最新推荐文章于 2024-07-24 20:44:05 发布