提交时间:2025-01-03 17:00:47

运行 ID: 35822

#include<bits/stdc++.h> using namespace std; const int N=5e5+10; int a[N],n,q; string S,T; namespace sub1{ /*bool chk(){ int res=0; for(int i=1;i<=n;i++) res+=a[i]; return (res<=(1e7+10)); }*/int val[N*20]; void kmp(string s,int le){ vector<int> fail;int len=s.length(); fail.resize(len+10); fail[0]=0;fail[1]=0; s=' '+s; for(int i=2;i<=len;i++){ int it=i-1;fail[i]=0; while(it!=0){ it=fail[it]; if(s[it+1]==s[i]){ fail[i]=it+1; break; } } }for(int i=1;i<=len-le;i++){ if(fail[i+le]==le-1){ val[i]++; } } } int main(){ string ns=""; for(int i=1;i<=n;i++){ for(int j=0;j<a[i];j++){ ns+=S[j]; } }kmp(T+"#"+ns,T.length()+1); int len=ns.length(); for(int i=1;i<=len;i++) val[i]+=val[i-1]; while(q--){ int l,r;cin>>l>>r; int lp=l+T.length()-1,rp=r; if(lp>rp){ cout<<0<<endl; }else{ cout<<val[rp]-val[lp-1]<<endl; } } return 0; } } int main(){ cin>>S>>T; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; cin>>q; //if(sub1::chk()) sub1::main(); return 0; }