题解:P4465 [国家集训队] JZPSTR
ini2015_____ · · 题解
比特赛特就是牛啊。
似乎正解是块状链表加后缀自动机这样非常猎奇的结构,果然字符串的尽头就是数据结构。
然而我们有更牛的 bitset 解法。
考虑维护
对于字符串匹配,我们使用神秘算法 shift-and,就是我们维护一个 bitset 表示模式串每个位置是否能过进行匹配,初始的时候是全
时间复杂度
const int N=1e6+5,inf=1e9+7;
int n,q,T; string p;
bitset<N> f[10],t;
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>q;
while(q--){
int o,x,y;
cin>>o;
if(o==0){
cin>>x>>p;
for(int i=0;i<10;i++)t=(f[i]>>x)<<x,f[i]^=t,f[i]|=t<<(p.size());
for(int i=0;i<p.size();i++)f[p[i]-'0'][i+x]=1;
}
if(o==1){
cin>>x>>y;
for(int i=0;i<10;i++)t=(f[i]>>x)<<x,f[i]^=t,t=(t>>y)<<x,f[i]|=t;
}
if(o==2){
cin>>x>>y>>p;
if(p.size()>y-x){printf("0\n");continue;}
t.set();
for(int i=0;i<p.size();i++)t&=(f[p[i]-'0']>>i);
printf("%d\n",(t>>x).count()-(t>>(y-p.size()+1)).count());
}
}
return 0;
}