• 洛谷 P1019 单词接龙


    题目描述

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

    输入输出格式

    输入格式:

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

    输出格式:

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

    输入输出样例

    输入样例#1:
    5
    at
    touch
    cheat
    choose
    tact
    a
    
    输出样例#1:
    23           (连成的“龙”为atoucheatactactouchoose)   

    说明

    NOIp2000提高组第三题

     1 /*
     2     dfs
     3     找从初始子串开始找 每个子串只能用一次
     4 */
     5 #include<string>
     6 #include<cstdio>
     7 #include<iostream>
     8 #define MAXN 30
     9 
    10 using namespace std;
    11 
    12 int f[MAXN];
    13 
    14 string s[MAXN],b;
    15 
    16 int n,maxn,maxnn;
    17 
    18 inline int pipei(string a,string b) {
    19     if(a.length()==1) {
    20         if(a[0]==b[0]) return b.length();
    21         else return 0;
    22     }
    23     else {
    24         for(int i=1;i<a.length();i++) {
    25             string t1=a.substr(a.length()-i);
    26             string t2=b.substr(0,i);
    27             if(t1==t2) return b.length()-i;
    28         }
    29     } 
    30     return 0;
    31 }
    32 
    33 inline void dfs(string a) {
    34     for(int i=1;i<=n;i++) {
    35         int t=pipei(a,s[i]);
    36         if(t&&f[i]<2) {
    37             f[i]++;
    38             maxnn+=t;
    39             if(maxnn>maxn) maxn=maxnn;
    40             dfs(s[i]);
    41             f[i]--;
    42             maxnn-=t;
    43         }
    44     }
    45     return;
    46 }
    47 
    48 int main() {
    49     scanf("%d",&n);
    50     for(int i=1;i<=n;i++) cin>>s[i];
    51     cin>>b;
    52     dfs(b);
    53     printf("%d
    ",maxn);
    54     return 0;
    55 }
    代码


    作者:乌鸦坐飞机
    出处:http://www.cnblogs.com/whistle13326/
    新的风暴已经出现 怎么能够停止不前 穿越时空 竭尽全力 我会来到你身边 微笑面对危险 梦想成真不会遥远 鼓起勇气 坚定向前 奇迹一定会出现

     
  • 相关阅读:
    DotNet的JSON序列化与反序列化
    DotNet指定文件显示的尺寸
    将文本文件的内容存储在DataSet中的方法总结
    Apple的LZF算法解析
    DotNet常用排序算法总结
    C#创建安全的字典(Dictionary)存储结构
    C#创建安全的栈(Stack)存储结构
    转化代码:添加在您网页中用户触发转化行为之后的地方。添加方法
    nginx配置ThinkPHP5二级目录访问
    好久没写原生的PHP调用数据库代码了分享个
  • 原文地址:https://www.cnblogs.com/whistle13326/p/6955363.html
Copyright © 2020-2023  润新知