poj 3450 Corporate Identity

和上一道题。。 一模一样。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<set>
#include<iostream>
using namespace std;
char a[4010][210];
char test[210];
int next[210];
set<string>ans;
int main()
{
    int n;
    while(cin>>n&&n)
    {
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
        }
        ans.clear();
        int len=strlen(a[0]);
        for(int i=len;i>=1;i--)
        {
            for(int j=0;j<=len-i;j++)
            {
                char ch=a[0][j+i];
                a[0][j+i]='\0';
                strcpy(test,a[0]+j);
                a[0][j+i]=ch;
                next[0]=-1;
                int k=0;
                int p=next[0];
                while(k<i)//build next;
                {
                    if(p==-1||test[k]==test[p])
                    {
                        k++;
                        p++;
                        next[k]=p;
                    }
                    else
                    {
                        p=next[p];
                    }
                }
                int flag=0;
                for(int who=1;who<n;who++)
                {
                    k=0;
                    p=0;
                    int ok=0;
                    while(k<len)
                    {
                        if(p==-1||a[who][k]==test[p])
                        {
                            p++;
                            k++;
                        }
                        else
                        {
                            p=next[p];
                        }
                        if(p==i)
                        {
                            ok=1;
                            break;
                        }
                    }
                    if(!ok)
                    {
                        flag=1;
                        break;
                    }
                }
                if(!flag)
                {
                    ans.insert(test);
                }
            }
            if(!ans.empty())
            {
                cout<<*ans.begin()<<endl;
                break;
            }
        }
        if(ans.empty())
        {
            cout<<"IDENTITY LOST"<<endl;
        }
    }
    return 0;
}

你可能感兴趣的:(KMP,poj)