记录编号 156374 评测结果 AAAAAAAAAA
题目名称 [POJ2774]很长的信息 最终得分 100
用户昵称 GravatarOIdiot 是否通过 通过
代码语言 C++ 运行时间 0.203 s
提交时间 2015-04-04 16:16:41 内存使用 23.20 MiB
显示代码纯文本
/*
	Machine: Class4_B2
	System: Windows7 SP1 32bit
*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <ctime>
#include <algorithm>
typedef long long LL;
using namespace std;
#define SpeedUp ios::sync_with_stdio(false)
#define Judge
//#define Debug
#define MAXN (100005)
#define INF ()
const double PI=acos(-1);
const int ZCY=1000000007;

inline int getint(){
	int x=0;
	char ch=getchar();
	while(ch<'0'||ch>'9'){ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x;
}
inline void outputint(int x){
	char ch[12];
	int cnt=0;
	if(x==0) {putchar('0'); putchar(10);return;}
	while(x) ch[++cnt]=x%10,x/=10;
	while(cnt) putchar(ch[cnt--]+48);
	putchar(10);
}
#define print(x) outputint(x)
#define read(x) x=getint()

string A,B;
struct Suffix_Automaton{
    struct Node{
        Node *fa,*son[28];
        int step;
    }a[MAXN<<1],*fst,*fnl;
    int tot;
	
    Suffix_Automaton(){tot=1,fst=fnl=&a[tot];}
    
	void Add(int x){
        Node *p=fnl,*np=&a[++tot];
        np->step=p->step+1;
        while(p&&!p->son[x]){ p->son[x]=np; p=p->fa;}
        if(!p) np->fa=fst;
        else if(p->step+1==p->son[x]->step) np->fa=p->son[x];
        else{
            Node *q=p->son[x],*nq=&a[++tot];
            memcpy(nq->son,q->son,sizeof(q->son));
            nq->step=p->step+1;
            nq->fa=q->fa;
			np->fa=nq;
			q->fa=nq;
            while(p&&p->son[x]==q){p->son[x]=nq;p=p->fa;}
        }
        fnl=np;
    }
	
	int Solve(string S){
		unsigned int N=S.size();
		int len=0,ret=0;
		Node *cur=fst;
		for(unsigned int i=0;i<N;i++){
			int ch=S[i]-'a';
			if(cur->son[ch])
				++len,cur=cur->son[ch];
			else{
				while(cur && !cur->son[ch]) cur=cur->fa;
				if(!cur) len=0,cur=fst;
				else len=cur->step+1,cur=cur->son[ch];
			}
			ret=max(ret,len);
		}
		return ret;
	}
}Sam;

void init(){
#ifdef Judge
	freopen("longlongmessage.in","r",stdin);
	freopen("longlongmessage.out","w",stdout);
//	SpeedUp;
#endif
	cin>>A;
	for(unsigned int i=0;i<A.size();i++)
		Sam.Add(A[i]-'a');
}

void work(){
	cin>>B;
	cout<<Sam.Solve(B)<<endl;
}

int main(){
	init();
	work();
#ifdef Debug
	cout<<"Time Used : "<<(double)clock()/CLOCKS_PER_SEC<<" s."<<endl;
	cout<<"Memory Used : "<<(double)(sizeof())/1048576<<" MB."<<endl;
#endif
	return 0;
}