记录编号 |
200565 |
评测结果 |
AAAAAAAAA |
题目名称 |
[NOIP 2000PJ]单词接龙 |
最终得分 |
100 |
用户昵称 |
AISS |
是否通过 |
通过 |
代码语言 |
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;
}