程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU 2328 POJ 3450 KMP

HDU 2328 POJ 3450 KMP

編輯:C++入門知識

#include<iostream>   
#include<cstring>   
#include<string>   
#include<cstdio>   
using namespace std;  
const int maxn=4444;  
  
char x[222],ans[222];   
char f[maxn][222];  
int next[222];  
  
void strcpy(char *y,int i,int len){  
    for(int j=0;j<len;++i,++j)  
        x[j]=y[i];  
    x[len]='\0';  
}  
void Get_Next(char *s){  
    int len=strlen(s);  
    next[0]=-1;  
    int i=0, j=-1;  
    while(i<len){  
        if(j==-1||s[i]==s[j]){  
            if(s[++i]==s[++j])  
                next[i]=next[j];  
            else next[i]=j;  
        }  
        else j=next[j];  
    }  
}  
bool KMP(char *s,char *a){//cout<<1<<endl;   
    int ls=strlen(s), la=strlen(a);  
    Get_Next(a);  
    int i=0, j=0;  
    while(i<ls&&j<la){  
        if(j==-1||s[i]==a[j])  
            ++i,++j;  
        else j=next[j];  
    }  
    if(j>=la) return true;  
    return false;  
}  
int main(){  
    int n;  
    while(~scanf("%d",&n),n){  
        for(int i=0;i<n;++i)  
            scanf("%s",f[i]);  
        int len=strlen(f[0]);  
        bool flag=false;  
        ans[0]='\0';  
        for(int i=len;i&&!flag;--i)  
        for(int j=0,k;j<=len-i;++j){  
            strcpy(f[0],j,i);  
            for(k=1;k<n;++k)  
                if(!KMP(f[k],x))break;  
            if(k==n)//cout<<x<<endl;   
                if(!flag||strcmp(ans,x)>0){  
                    strcpy(ans,x); flag=true;  
                }  
        }  
        if(flag)  
            puts(ans);  
        else   
            puts("IDENTITY LOST");  
    }  
    return 0;  
}  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved