1 条题解

  • 0
    @ 2025-12-1 23:28:18
    #include<bits/stdc++.h>
    using namespace std;
    const int N=2e3+5;
    int n,ans=0;
    string a[N],cp;
    int nxt[N];
    void inti(string s){
    	nxt[0]=-1;
    	for(int i=0,j=-1;i<s.size();){
    		if(s[i]==s[j]||j==-1)
    			nxt[++i]=++j;
    		else
    			j=nxt[j];
    	}
    }
    int KMP(string a,string b){
    	int ans=-1;
    	for(int i=0,j=0;i<a.size();){
    		if(a[i]==b[j]&&j==b.size()-1){
    			return b.size();
    		}
    		else if(a[i]==b[j]||j==-1){
    			ans=max(ans,j);
    			i++;j++;
    		}
    		else
    			j=nxt[j];
    	}
    	return ans+1;
    }
    int cheke(string b){
    	int ans=1e9;
    	inti(b);
    	for(int i=1;i<=n;i++)
    		ans=min(KMP(a[i],b),ans);
    	return ans;
    }
    int main() {
      	cin>>n;
      	for(int i=1;i<=n;i++){
      		cin>>a[i]; 
    	}
    	for(int i=0;i<a[1].size();i++){
    		string cp="";
    		for(int j=i;j<a[1].size();j++)
    			cp+=a[1][j];
    		ans=max(cheke(cp),ans);
    	}
    	cout<<ans;
      	return 0;
    }
    
    
    • 1

    信息

    ID
    4611
    时间
    1000ms
    内存
    512MiB
    难度
    7
    标签
    递交数
    69
    已通过
    17
    上传者