51. [NOIP2000] 单词接龙
★☆ 输入文件:dcjl.in
输出文件:
dcjl.out
简单对比
时间限制:1 s 内存限制:128 MB
水DFS枚举
#include <stdio.h>
#include <string.h>
#define MAXN 1000
int cnt;
char str[100][MAXN];
int usecnt[100];
char buffer[1000];
char result[1000];
int lenstr[MAXN];
int maxl;
char s[2];
inline bool IsPrefix(char *pre,char *text)
{
char *p;
p=text;
while(*pre)
{
if(*pre!=*p)
{
return false;
}
p++;
pre++;
}
return true;
}
void dfs(char *text,char *next)
{
char *ctext;
int textlen,nextlen;
int len;
textlen=strlen(text);
if(textlen>maxl)
{
//strcpy(result,text);
maxl=strlen(text);
}
nextlen=strlen(next);
for(int i=0;i<cnt;i++) if(usecnt[i]<2 && IsPrefix(next,str[i]))
{
strcat(text,str[i]+nextlen);
usecnt[i]++;
len=textlen+lenstr[i]-nextlen;
for(int j=textlen;j<len;j++)
{
dfs(text,text+j);
}
usecnt[i]--;
text[textlen]=0;
}
}
int main()
{
freopen("dcjl.in","r",stdin);
freopen("dcjl.out","w",stdout);
scanf("%d",&cnt);
for(int i=0;i<cnt;i++)
{
scanf("%s",str[i]);
lenstr[i]=strlen(str[i]);
}
scanf("%s",s);
maxl=0;
strcpy(buffer,s);
dfs(buffer,s);
printf("%d\n",maxl);
return 0;
}