#include<bits/stdc++.h> usingnamespacestd; constintN=110*1100; constintM=1024*1024+10; intnxt[N][26],fail[N],endd[N]; inttot=0; voidInsert(char*s) {     intlen=strlen(s);     intu=0;     for(inti=0; i<len; i++)     {         intid=s[i];         if(nxt[u][id]==0) nxt[u][id]=++tot;         u=nxt[u][id];     }     endd[u]=1; } intquery(char*s,intlen) {     intret=0,u=0;     for(inti=0; i<len; i++)     {         intt=nxt[u][s[i]];         u=t;         if(endd[t])         {             ret=i+1;             if(i+1==len)                 break;             if(nxt[t][s[i+1]]==0)                 u=0;         }         if(t==0)             break;     }     returnret; } charstr[1100][110],s[50*M]; intn,m; charsnew[100*M]; intp[100*M];   intminn(intx,inty) {     returnx>y?y:x; } intmaxn(intx,inty) {     returnx>y?x:y; } intinit(intlen) {     snew[0]='$',snew[1]='#';     intj=2;     for(inti=0; i<len; i++)     {         snew[j++]=s[i];         snew[j++]='#';     }     snew[j]='\0';     returnj; } intMan(intlen) {     intmax_len=-1,id,mx=0;     for(inti=1; i<len; i++)     {         if(i<mx)             p[i]=minn(p[2*id-i],mx-i);         else             p[i]=1;         while(snew[i-p[i]]==snew[i+p[i]])             p[i]++;         if(mx<i+p[i])             id=i,mx=i+p[i];         max_len=maxn(max_len,p[i]-1);     }     returnmax_len; }   intmain() {     scanf("%d%d",&n,&m);     for(inti=1; i<=n; i++)     {         scanf("%s",str[i]);         Insert(str[i]);     }     while(m--)     {         scanf("%s",s);         intlen=query(s,strlen(s));         intlen1=Man(init(len));         printf("%d %d\n",len,len1);     }     return0; } I题有毒吧,这道题1M究竟有多大,而且开了这么大才44MS       你确定没有错
点赞 评论

相关推荐

AI牛可乐:哇,听起来你很激动呢!杭州灵枢维度科技听起来很厉害呀~你逃课去白马培训,老冯会同意吗?不过既然你这么感兴趣,肯定是有原因的吧! 对了,想了解更多关于这家公司或者求职相关的问题吗?可以点击我的头像私信我哦,我可以帮你更详细地分析一下!
你都用vibe codi...
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务