Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
35824 baka24 【BJ】T1 C++ 运行出错 30 4004 MS 73492 KB 1220 2025-01-03 17:02:29

Tests(6/20):


#include<bits/stdc++.h> using namespace std; // #define int long long int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=500010; int n,m,q,k,a[MAXN],fail[MAXN<<4],ct[MAXN<<4]; char s[MAXN],t[MAXN],c[MAXN<<4]; void slv(){ scanf("%s",s+1);scanf("%s",t+1); n=strlen(s+1),m=strlen(t+1); k=read(); for(int i=1;i<=k;i++)a[i]=read(); q=read(); int len=0; for(int i=1;i<=k;i++){ for(int j=1;j<=a[i];j++)c[++len]=s[j]; } int ind=0; for(int i=1;i<m;i++){ while(ind&&t[ind+1]!=t[i+1])ind=fail[ind]; if(t[ind+1]==t[i+1])ind++; fail[i+1]=ind; } ind=0; for(int i=1;i<=len;i++){ while(ind&&t[ind+1]!=c[i])ind=fail[ind]; if(t[ind+1]==c[i])ind++; if(ind==m)ct[i-m+1]++,ind=fail[ind]; } for(int i=1;i<=len;i++)ct[i]+=ct[i-1]; while(q--){ int l=read(),r=read(); if(r-l+1<=m)printf("0\n"); else printf("%d\n",ct[r-m+1]-ct[l-1]); } } signed main(){ // freopen("youl.in","r",stdin);freopen("youl.out","w",stdout); slv(); return 0; }


测评信息: