2013年12月10日 星期二

[USACO] 2-3-1 Longest Prefix


/*
ID: 551100k1
LANG: C++
TASK: prefix
*/
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
string s;
char c[205][15],arr[200005];
int dp[200005]={0},len[205];
int main(){
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    int top=0,i,j,k,ans=0,flag;
    while(scanf("%s",c[top])){
        if(strcmp(c[top],".")==0) break;
        len[top]=strlen(c[top]);
        top++;
    }
    s=" ";
    while(scanf("%s",arr)!=EOF){
        s+=string(arr);
    }
    dp[0]=1;
    for(i=1;i<s.length();i++){
        for(j=0;j<top;j++){
            if(len[j]<=i && dp[i-len[j]]==1){
                flag=1;
                for(k=len[j]-1;k>=0;k--){
                    if(c[j][k]!=s[i-len[j]+k+1]){
                        flag=0;
                        break;
                    }
                }
                if(flag){
                    dp[i]=1;
                    if(i>ans) ans=i;
                }
            }
        }
    }
    printf("%d\n",ans);
}

沒有留言:

張貼留言