记录编号 222904 评测结果 AAAAAAAAA
题目名称 [NOIP 2000PJ]单词接龙 最终得分 100
用户昵称 GravatarRapiz 是否通过 通过
代码语言 C++ 运行时间 0.002 s
提交时间 2016-02-05 16:09:46 内存使用 0.32 MiB
显示代码纯文本
//luogu P1019 单词接龙(NOIP2000)
//#define LOCAL
#include<iostream>
#include<fstream>
#include<string>
#include<algorithm>
#define REP(a,b,c) for(int c=a;c<=b;c++)
using namespace std;
const int MAXN=20+5;
int len[MAXN][MAXN],ans,n;
string w[MAXN];
int p[MAXN];
char ch;
#define cin fin
#ifndef LOCAL
#define cout fout
#endif
ifstream fin("dcjl.in");
ofstream fout("dcjl.out");
void dfs(int idx,int cnt){ 
//	cout<<w[idx]<<' '<<cnt<<endl;
	for(int i=1;i<=n;i++) if(p[i]<2&&len[idx][i]!=0) {
		p[i]++;
		dfs(i,cnt+len[idx][i]);
		p[i]--;
	}
	ans=max(ans,cnt);
//	cout<<"\n";
}
int main(){ 
	cin>>n;
	REP(1,n,i) cin>>w[i];
	REP(1,n,i) REP(1,n,j){
		//if(i==j) continue;
		int len1=w[i].size(),len2=w[j].size(),mlen=min(len1,len2);
		for(int k=1;k<=mlen;k++) {
			if(w[i].substr(len1-k)==w[j].substr(0,k)) {
				if(k!=len1) len[i][j]=len2-k;
			//	printf("k:%d Compare w[%d].substr(%d) with w[%d].substr(0,%d): %s -- %s\n",k,i,len1-k,j,k,w[i].substr(len1-k).c_str(),w[j].substr(0,k).c_str());
			//	printf("len[%d][%d]=%d\n",i,j,len[i][j]);
				break;
			}
		}
	}
	cin>>ch;
	for(int i=1;i<=n;i++) {
		if(w[i][0]!=ch) continue;
		p[i]++;
		dfs(i,w[i].size());
		p[i]--;
	}
	//cout<<endl;
	//printf("ANS:%d",ans);
	cout<<ans;
}