zoukankan      html  css  js  c++  java
  • noip2000 单词接龙

      

    题目描述
    
    单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),
    在两个单词相连时,其重合部分合为一部分,例如 beastbeast 和 astonishastonish ,如果接成一条龙则变为 beastonishbeastonish ,另外相邻的两部分不能存在包含关系,
    例如 atat 和 atideatide 间不能相连。 输入输出格式 输入格式: 输入的第一行为一个单独的整数 nn ( n le 20n≤
    20 )表示单词数,以下 nn 行每行有一个单词,输入的最后一行为一个单个字符,表示“龙”开头的字母。
    你可以假定以此字母开头的“龙”一定存在. 输出格式: 只需输出以此字母开头的最长的“龙”的长度

      从开始学搜索开始接一直觉得这题很难qwq,所以一直没有写过,刚才去看了下大佬的题解,感觉也没有那么难啊,23333333,其实是大佬的题解写的好,就是普通的搜索,枚举拼接哪一个单词,枚举拼接长度,检查,更新就行了。大佬的题解写的比较详细:http://www.cnblogs.com/OIerShawnZhou/

    代码:

     1 #include<iostream>
     2 #include<cstring> 
     3 #include<cstdio>
     4 #include<string>
     5 using namespace std;
     6 int n;
     7 string s1[25];
     8 int vis[25]; 
     9 int ans;
    10 string s2;
    11 bool check(string ss1,string ss2,int k)
    12 {
    13     int l=ss1.length();
    14     for(int i=0;i<k;++i)
    15         if(ss1[l-k+i]!=ss2[i])return 0;
    16     return 1;
    17 }
    18 string add(string tmp,string s,int k)
    19 {
    20     int l=s.length();
    21     for(int i=k;i<l;++i)
    22         tmp+=s[i];
    23     return tmp;
    24 }
    25 void dfs(string now)
    26 {
    27     int len=now.length();
    28     ans=max(ans,len);
    29     for(int i=1;i<=n;++i)
    30     {
    31         if(vis[i]>=2)continue;
    32         int len2=s1[i].length();
    33         for(int j=1;j<len2;++j)
    34         {
    35             if(check(now,s1[i],j))
    36             {
    37                 string tmp=now;
    38                 tmp=add(tmp,s1[i],j);
    39                 vis[i]++;
    40                 dfs(tmp);
    41                 vis[i]--;
    42             }
    43         }
    44     }
    45 }
    46 int main()
    47 {
    48     scanf("%d",&n);
    49     for(int i=1;i<=n;++i)cin>>s1[i];
    50     cin>>s2;
    51     dfs(s2);
    52     printf("%d",ans);
    53     return 0;
    54 }
    View Code
  • 相关阅读:
    十八、分页查询
    十七、oracle的权限和角色
    十六、同义词(synonyms)
    十五、序列
    十四、禁用与启动约束
    十三、修改表时添加约束
    十二、约束
    十一、修改表格
    十、事务(Transaction)
    Windows 远程连接后,自动断开,所有程序都自动关闭(待验证,待更新)
  • 原文地址:https://www.cnblogs.com/yuelian/p/9101968.html
Copyright © 2011-2022 走看看