提交记录 3967


用户 题目 状态 得分 用时 内存 语言 代码长度
Chuzyh noi18c. 【NOI2018】你的名字 Time Limit Exceeded 24 4 s 609828 KB C++ 2.66 KB
提交时间 评测时间
2018-07-18 20:13:56 2020-07-31 22:10:18
#include<cstdio>
#include<vector>
#include<cstring>
#include<map>

using namespace std;
#define int long long
const int N=1000010;
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=13,base2=97,ha1=1e7+19,ha2=1e7+79;

char s[N],t[N];
int ans;
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,hh3,hh4;
map<int,int> mp;
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;
    	mp.clear();
    	if(len<BLOCK)
    	{
    		int now;
    		for(i=1;i<=len;i++)
    		{
    			now=1;int H1=0;
    			for(j=i;j<=len;j++)
    			{
    				H1=H1*base1+t[j];
    				if(now!=-1)now=trans[now][t[j]-'a'];
    				if(now==-1)
					{
						if(mp[H1]==0)
						ans++,mp[H1]=1;
					}
				}
			}
    		printf("%lld\n",ans);
		}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;
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #1785.32 ms1 MB + 296 KBAcceptedScore: 4

Testcase #2781.603 ms1 MB + 580 KBAcceptedScore: 4

Testcase #3815.023 ms1 MB + 584 KBAcceptedScore: 4

Testcase #44 s579 MB + 944 KBTime Limit ExceededScore: 0

Testcase #53.999 s579 MB + 944 KBAcceptedScore: 4

Testcase #6500.052 ms592 MB + 864 KBAcceptedScore: 4

Testcase #7501.087 ms592 MB + 872 KBAcceptedScore: 4

Testcase #82.977 s583 MB + 444 KBWrong AnswerScore: 0

Testcase #94 s583 MB + 880 KBTime Limit ExceededScore: 0

Testcase #104 s584 MB + 788 KBTime Limit ExceededScore: 0

Testcase #114 s585 MB + 148 KBTime Limit ExceededScore: 0

Testcase #124 s587 MB + 136 KBTime Limit ExceededScore: 0

Testcase #134 s586 MB + 516 KBTime Limit ExceededScore: 0

Testcase #144 s591 MB + 68 KBTime Limit ExceededScore: 0

Testcase #154 s587 MB + 920 KBTime Limit ExceededScore: 0

Testcase #164 s595 MB + 324 KBTime Limit ExceededScore: 0

Testcase #174 s589 MB + 316 KBTime Limit ExceededScore: 0

Testcase #184 s591 MB + 972 KBTime Limit ExceededScore: 0

Testcase #194 s593 MB + 252 KBTime Limit ExceededScore: 0

Testcase #204 s594 MB + 232 KBTime Limit ExceededScore: 0

Testcase #214 s595 MB + 380 KBTime Limit ExceededScore: 0

Testcase #224 s595 MB + 432 KBTime Limit ExceededScore: 0

Testcase #234 s595 MB + 464 KBTime Limit ExceededScore: 0

Testcase #244 s595 MB + 192 KBTime Limit ExceededScore: 0

Testcase #254 s595 MB + 548 KBTime Limit ExceededScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-04-17 18:18:00 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠