记录编号 108213 评测结果 AAAAAA
题目名称 [IOI 1996][USACO 2.3] 最长前缀 最终得分 100
用户昵称 GravatarJSX 是否通过 通过
代码语言 C++ 运行时间 0.032 s
提交时间 2014-07-02 17:21:19 内存使用 0.50 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include <set>
using namespace std;

int nLen[300],Len_All=0,Max_Len=0;
string strDate[300];
string strAll;
bool f[200002]={0};
int n=1;

bool find(string s2,int x)
{
	for(int i=1;i<=n;++i)
	{
		if(nLen[i]==x)
		{
			if(strDate[i]==s2)
			{
				return true;
			}
		}
		
	} 
	return false;
}


int main()
{
	freopen("prefix.in","r",stdin);
	freopen("prefix.out","w",stdout);
	
	while(cin>>strDate[n])
	{
		if(strDate[n]==".")
		{
			break;
		}
		else
		{
			nLen[n]=strDate[n].size();
			++n;
		}
	}
	n--;	
	
	string s1;
	while(cin>>s1)
	{
		strAll+=s1;
	}	
	Len_All=strAll.size();
	strAll="#"+strAll;
	f[0]=true;
	
	for(int i=1;i<=Len_All;++i)
	{
		for(int j=i-1,c=1;j>=0&&c<=10;j--,c++)
		{
			if(f[j])
			{
				s1=strAll.substr(j+1,i-j);//注意下标 
				int x=s1.size();
				
				if(find(s1,x))
				{
					f[i]=true;
					Max_Len=i;
					break;
				}
			}
		}			
	}
	
	cout<<Max_Len;
	
	return 0;
}