CF914F Substrings in a String 题解
正解分块+后缀自动机?什么东西,我不知道……所以我选择伟大的bitset,复杂度\(O(\frac{n^2}{w})\),可以通过,并且在分块+后缀自动机还被卡常的时候跑的飞起!
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
bitset<maxn>a[26],ans;
string s,t;
int m,l,r,op;
char c;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>s>>m;
for(int i=0;i<s.size();i++){
a[s[i]-'a'][i]=1;
}
while(m--){
cin>>op>>l;
l--;
if(op==1){
cin>>c;
a[s[l]-'a'][l]=0;
s[l]=c;
a[s[l]-'a'][l]=1;
}
else{
cin>>r>>t;
r--;
if(r-l+1<t.size()){
cout<<0<<'\n';
continue;
}
ans=0;
ans=~ans;
for(int i=0;i<t.size();i++){
ans&=(a[t[i]-'a']>>i);
}
cout<<(ans>>l).count()-(ans>>(r-t.size()+2)).count()<<'\n';
}
}
return 0;
}
浙公网安备 33010602011771号