#include<bits/stdc++.h>
using namespace std;
const int N=1000010;
#define int long long
int n,i,j,tot=1,slink[N*2],trans[N*2][26],endpos[N*2][2],maxlen[N*2],pre[N*2][2];
int top,fir[N*2],ne[N*4],la[N*4],to[N*4],BLOCK,q,l,r;
const int base1=233,base2=97,ha1=1e7+19,ha2=1e7+79;
char s[N],t[N];
int ans;
int HASH[10000100][2];
int newstate(int mx,int* _trans,int _slink)
{
tot++,maxlen[tot]=mx,slink[tot]=_slink;
if(_trans)for(int i=0;i<26;i++)trans[tot][i]=_trans[i];
else for(int i=0;i<26;i++)trans[tot][i]=-1;
return tot;
}
int addchar(int now,char ch,int which)
{
int c=ch-'a',v=now;
int NEW=newstate(maxlen[now]+1,NULL,1);
while(v!=-1&&trans[v][c]==-1)trans[v][c]=NEW,v=slink[v];
if(v==-1)
{
slink[NEW]=1;
return NEW;
}
int x=trans[v][c];
if(maxlen[v]+1==maxlen[x])
{
slink[NEW]=x;
return NEW;
}
int y=newstate(maxlen[v]+1,trans[x],slink[x]);
slink[x]=slink[NEW]=y;
while(v!=-1&&trans[v][c]==x)
{
trans[v][c]=y;
v=slink[v];
}
return NEW;
}
vector<int> hh1,hh2;
void add(int x,int y)
{
top++,to[top]=y;
if(fir[x]==0)fir[x]=top;else ne[la[x]]=top;
la[x]=top;
}
void dfs(int x)
{
for(int i=fir[x];i;i=ne[i])
dfs(to[i]),endpos[x][0]+=endpos[to[i]][0],endpos[x][1]+=endpos[to[i]][1];
endpos[x][0]+=pre[x][0],endpos[x][1]+=pre[x][1];
if(endpos[x][0]==0)ans+=(maxlen[x]-maxlen[slink[x]]);
}
main()
{
scanf("%s",s+1),n=strlen(s+1);BLOCK=1000;
memset(trans[1],-1,sizeof trans[1]);slink[1]=-1;
int LA=1;
for(i=1;i<=n;i++)LA=addchar(LA,s[i],0),pre[LA][0]++;
scanf("%lld",&q);
while(q--)
{
scanf("%s",t+1);scanf("%lld%lld",&l,&r);int len=strlen(t+1);ans=0;hh1.clear();hh2.clear();
if(len<BLOCK)
// if(0)
{
int now;
for(i=1;i<=len;i++)
{
now=1;int H1=0,H2=0;
for(j=i;j<=len;j++)
{
H1=(H1*base1+t[j])%ha1;
H2=(H2*base2+t[j])%ha2;
if(now!=-1)now=trans[now][t[j]-'a'];
if(now==-1)
{
if(!(HASH[H1][0]&&HASH[H2][1]))
{
ans++,HASH[H1][0]=HASH[H2][1]=1,hh1.push_back(H1),hh2.push_back(H2);
}
}
}
}
printf("%lld\n",ans);
for(i=0;i<hh1.size();i++)HASH[hh1[i]][0]=0;
for(i=0;i<hh2.size();i++)HASH[hh2[i]][1]=0;
}else
{
int LA=1;
for(i=1;i<=len;i++)LA=addchar(LA,t[i],1),pre[LA][1]++;
for(i=2;i<=tot;i++)
add(slink[i],i);
dfs(1);
printf("%lld\n",ans);
memset(fir,0,sizeof fir);
memset(ne,0,sizeof ne);
memset(to,0,sizeof to);
memset(la,0,sizeof la);top=0;
memset(trans,0,sizeof trans);
memset(trans[1],-1,sizeof trans[1]);
memset(slink,0,sizeof slink);
memset(endpos,0,sizeof endpos);
memset(pre,0,sizeof pre);
tot=1;
slink[1]=-1;
LA=1;
for(i=1;i<=n;i++)LA=addchar(LA,s[i],0),pre[LA][0]++;
}
}
return 0;
}
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Testcase #1 | 218.865 ms | 153 MB + 292 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #2 | 219.938 ms | 153 MB + 588 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #3 | 228.332 ms | 153 MB + 592 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #4 | 4 s | 579 MB + 956 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #5 | 4 s | 579 MB + 956 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #6 | 500.3 ms | 592 MB + 876 KB | Accepted | Score: 4 | 显示更多 |
| Testcase #7 | 501.303 ms | 592 MB + 884 KB | Accepted | Score: 4 | 显示更多 |
| Testcase #8 | 1.13 s | 735 MB + 200 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #9 | 1.417 s | 735 MB + 108 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #10 | 2.385 s | 736 MB + 44 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #11 | 2.809 s | 736 MB + 408 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #12 | 3.852 s | 738 MB + 152 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #13 | 4 s | 737 MB + 776 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #14 | 4 s | 740 MB + 480 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #15 | 4 s | 739 MB + 164 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #16 | 4 s | 744 MB + 280 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #17 | 4 s | 740 MB + 584 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #18 | 4 s | 740 MB + 836 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #19 | 4 s | 741 MB + 1016 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #20 | 4 s | 743 MB + 108 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #21 | 4 s | 744 MB + 296 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #22 | 4 s | 744 MB + 300 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #23 | 4 s | 744 MB + 304 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #24 | 4 s | 744 MB + 252 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #25 | 4 s | 744 MB + 336 KB | Time Limit Exceeded | Score: 0 | 显示更多 |