记录编号 |
289318 |
评测结果 |
AAAAAAAAA |
题目名称 |
[NOIP 2000PJ]单词接龙 |
最终得分 |
100 |
用户昵称 |
森林 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.044 s |
提交时间 |
2016-08-04 18:37:25 |
内存使用 |
0.31 MiB |
显示代码纯文本
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<stack>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define WJ(name) freopen(#name".in","r",stdin);freopen(#name".out","w",stdout);
#define JW fclose(stdin);fclose(stdout);
using namespace std;
int n;
int flag[30]={0};
string d[31];
char ch;
inline void QR(int& x){
char ch;
while(ch=getchar(),ch<'0'||ch>'9');
x=ch-48;
while(ch=getchar(),'0'<=ch&&ch<='9')x=x*10+ch-48;
}
inline void QW(int num){
int cnt=0;char str[30];
while(str[++cnt]=num%10+48,num/=10);
while(putchar(str[cnt]),--cnt);
}
/*传入之前整个的字符串*/
inline int mfind(string s){
// cout<<s<<endl;
int ans=s.length(),len=s.length();
for(int i=1;i<=n;i++){
if(flag[i]<2){
++flag[i];
for(int j=len-1;j>0;j--){
// cout<<s.substr(len-j,j)<<endl<<d[i].find(s.substr(len-j,j),0)<<endl;
if(!d[i].find(s.substr(len-j,j),0)&&s.substr(len-j,j)!=d[i]){
ans=max(ans,mfind(s.substr(0,len-j)+d[i]));
}
}
--flag[i];
}
}
return ans;
}
int main(){
WJ(dcjl);
QR(n);
for(int i=1;i<=n;i++)cin>>d[i];
cin>>ch;
int ans=0;
for(int i=1;i<=n;i++)
if(d[i][0]==ch)flag[i]++,ans=max(ans,mfind(d[i]));
QW(ans);
JW;
return 0;
}