记录编号 200565 评测结果 AAAAAAAAA
题目名称 [NOIP 2000PJ]单词接龙 最终得分 100
用户昵称 GravatarAISS 是否通过 通过
代码语言 C++ 运行时间 0.132 s
提交时间 2015-10-28 22:22:10 内存使用 0.32 MiB
显示代码纯文本
#include<cstdio>
#include<cstring> 
#include<cstdlib> 
#include<iostream>
#include<cmath>
#include<algorithm>
#include<string>
#include<set>
#include<map>
#include<vector>
#include<queue>
#define maxn 45
using namespace std;
int i,j,k,m,n,ans=0,jie[maxn][maxn];
char c;
string a[maxn];
bool vis[maxn];
int lian(string a,string b){
	int x=min(a.size(),b.size()),len=0;
	if(a!=b&&a.substr(a.size()-x,x)==b.substr(0,x))return 0;
	for(int i=1;i<x;i++){
		string s1=a.substr(a.size()-i,i),s2=b.substr(0,i);
		if(s1==s2){len=i;break;}
	}
	return len;
}
int dfs(int x){
	int ans=a[x].size();
	for(int i=0;i<2*n;i++){
		if(!vis[i]&&jie[x][i]){
			vis[i]=1;
			ans=max(ans,(int)a[x].size()+dfs(i)-jie[x][i]);
			vis[i]=0;
		}
	}
	return ans;	
}
int main(){
//	freopen("0.txt","r",stdin);
			freopen("dcjl.in","r",stdin);
	freopen("dcjl.out","w",stdout);
	cin>>n;
	for(i=0;i<2*n;i+=2){cin>>a[i];a[i+1]=a[i];}
	for(i=0;i<2*n;i++)
	for(j=0;j<2*n;j++)jie[i][j]=lian(a[i],a[j]);
	cin>>c;
	for(i=0;i<2*n;i+=2){
		if(a[i][0]==c){
			vis[i]=1;
			ans=max(dfs(i),ans);
			vis[i]=0; 
		}
	}
	cout<<ans;
	return 0;
}