Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35823 | LYLAKIOIAKIOI | 【BJ】T1 | C++ | 运行出错 | 40 | 4148 MS | 659744 KB | 1495 | 2025-01-03 17:01:52 |
#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*100]; 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; }