求助大佬,这个程序有一个点没过
查看原帖
求助大佬,这个程序有一个点没过
246331
mystic_qwq楼主2023/5/5 22:09
n,visit[20],ans=0;
char word[601],a[20][31],fch;
max(a,b){return a>b?a:b;}
len(char*s){int l=0;while(*s)s++,l++;return l-1;}
judge(p){
  int lw=len(word),lp=len(a[p]);
  for(int i=lw;i>=max(0,lw-lp+1);i--)
    if(word[i]==a[p][0]){
      for(int j=1;j<=lw-i;j++)
        if(word[i+j]!=a[p][j])
          goto _;
      return lw-i+1;
      _:;
    }
  return 0;
}
add(char*s1,char*s2,int start){
  int i,j;
  for(i=len(s1)+1,j=start;j<=len(s2);i++,j++)
     s1[i]=s2[j];
  s1[i]=0;
}
del(char*s1,int sum){
  while(sum--)
    s1[len(s1)]=0;
}
dfs(p,l){
  add(word,a[p],l);
  visit[p]++;
  int tmpl;
  for(int i=0;i<=n-1;i++)
    if(visit[i]<2&&(tmpl=judge(i)))
      dfs(i,tmpl);
  if(word[0]==fch)
    ans=max(ans,len(word));
  del(word,len(a[p])-l+1);
  visit[p]--;
}
main(){
  scanf("%d",&n);
  for(int i=0;i<n;i++)
    scanf("%s",a[i]);
  while(!isalpha(fch))
    fch=getchar();
  dfs(0,0);
  printf("%d",ans+1);
}
2023/5/5 22:09
加载中...