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.
    
    黎明的朝阳,会为苦难中最坚强的信念升起
  • 相关阅读:
    project euler 开坑
    hdu 5382 GCD?LCM!
    Leetcode 557. 反转字符串中的单词 III
    Leetcode 344. 反转字符串
    Leetcode 345. 反转字符串中的元音字母
    008.C++类改写模板类
    007.C++构造函数
    006.C++头文件
    02.树的序列化与反序列化(C++)
    Leetcode 94. 二叉树的中序遍历
  • 原文地址:https://www.cnblogs.com/Dawn-Star/p/9657111.html
Copyright © 2011-2022 走看看