• 【搜索】P1019 单词接龙


    题目描述

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

    输入输出格式

    输入格式:

    输入的第一行为一个单独的整数n (n20)表示单词数,以下n 行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的字母。你可以假定以此字母开头的“龙”一定存在.

    输出格式:

    只需输出以此字母开头的最长的“龙”的长度

    输入输出样例

    输入样例#1: 
    5
    at
    touch
    cheat
    choose
    tact
    a
    
    输出样例#1: 
    23

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N = 25;
     4 string S[N],tmp;
     5 int ans,n,vis[N];
     6 char Head[N];
     7 int check(string u,string v){
     8     int len = min( u.size()-1 , v.size()-1 );
     9     int L1 = u.length();
    10     int L2 = v.length();
    11     for(int i=1;i<=len;i++){
    12         string tu = u.substr( L1 - i );
    13         string tv = v.substr( 0 , i );
    14         if( tu == tv ){
    15             return i;
    16         }
    17     }
    18     return -1;
    19 }
    20 void dfs(string x){
    21     for(int i=1;i<=n;i++){
    22         int F = check(x,S[i]);
    23         if( vis[i] <2 &&  F != -1 ){
    24             vis[i]++;
    25             tmp = S[i].substr(F);
    26             tmp = x + tmp;
    27             dfs(tmp);
    28             vis[i]--;
    29         }
    30     }
    31     ans = max(ans, (int)x.length() );
    32     return ;
    33 }
    34 int main()
    35 {
    36     ios_base :: sync_with_stdio(0);
    37     cin.tie(NULL),cout.tie(NULL);
    38     cin>>n;
    39     for(int i=1;i<=n;i++){
    40         cin>>S[i];
    41     }
    42     cin>>Head;
    43     for(int i=1;i<=n;i++){
    44         if( Head[0] == S[i][0]){
    45             vis[i]++;
    46             dfs(S[i]);
    47             vis[i]--;
    48         }
    49     }
    50     cout<<ans<<endl;
    51 }
    View Code
  • 相关阅读:
    LM算法学习笔记(一)
    USB3.0剖析(锆石科技FPGA)
    USB2.0系列(锆石科技FPGA)
    异步FIFO
    总线时钟同步
    [已解决]Mac下Anaconda-Navigator闪退问题
    [已解决]Mac下运行spyder提示"Python 意外退出"
    博客园账号被盗
    unhandled event loop exception解决方案
    初识ListView
  • 原文地址:https://www.cnblogs.com/Osea/p/10889883.html
Copyright © 2020-2023  润新知