zoukankan      html  css  js  c++  java
  • 【搜索】单词接龙 luogu-1019

    题目描述

    单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合部分合为一部分,例如 beast和astonish,如果接成一条龙则变为beastonish,另外相邻的两部分不能存在包含关系,例如at和 atide 间不能相连。

    AC代码

    var
      st:array[1..20]of string;
      n,ans,i:longint;
      vis:array[1..20]of longint;
      
    function max(n,m:longint):longint;
    begin
      if n>m then exit(n) else exit(m);
    end;
    
    function min(n,m:longint):longint;
    begin
      if n<m then exit(n) else exit(m);
    end;
    
    function cover(st1,st2:string):longint;
    var
      i,j:longint;
      fg:boolean;
    begin
      for i:=1 to min(length(st1),length(st2))-1 do 
        begin
          fg:=true;
          for j:=1 to i do 
            if st1[length(st1)-i+j]<>st2[j] then fg:=false;
          if fg then exit(i);
        end;
      exit(0);
    end;
    
    procedure dfs(s:string;len:longint);
    var
      i,covernum:longint;
    begin
      ans:=max(ans,len);
      for i:=1 to n do 
        begin
          if vis[i]>=2 then continue;
          covernum:=cover(s,st[i]);
          if covernum>0 then 
            begin
              inc(vis[i]);
              dfs(st[i],len+length(st[i])-covernum);
              dec(vis[i]);
            end;
        end;
    end;
    
    begin
      fillchar(vis,sizeof(vis),0);
      readln(n);
      for i:=1 to n+1 do readln(st[i]);
      ans:=0;
      dfs(' '+st[n+1],1);
      writeln(ans);
    end.
    
    黎明的朝阳,会为苦难中最坚强的信念升起
  • 相关阅读:
    redis 数据迁移
    redis
    Redis集群的三种模式
    Golang 协程 (goroutine) 与通道 (channel)
    Python生成器next方法和send方法区别
    python 文件
    Tornado 异步以及非阻塞的I/O
    python 多进程和多线程3 —— asyncio
    利用CSS改变图片颜色的100种方法!
    jquery获取div的位置
  • 原文地址:https://www.cnblogs.com/Dawn-Star/p/9657111.html
Copyright © 2011-2022 走看看