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

    看了许多题解都好长啊,自不量力的来贴一下代码

    (震惊于这都能ac。。。)

    这道题的思路是先从字符串中找有重部分然后直接比较剩下的部分,比较的数据也可以用来计算数值

    其实满水的题

    总之看注释啦(竟然能耐心的写完注释...)

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<stack>
     5 #include<cstring>
     6 using namespace std;
     7 int n,num;
     8 string w[25];//记录单词
     9 int use[25];//记录使用单词次数
    10 int ans,now=1;//记录接龙的长度,now=1是省略了头字母
    11 void dfs(int k)//深搜
    12 {
    13     ans=max(ans,now);//跟上个题解学的,取大
    14     for(int i=1;i<=n;i++)//搜索每个单词
    15     {
    16         if(use[i]<2)//判断
    17         {
    18             for(int j=0;j<w[k].length();j++)//判断,如果首字母相同则比较
    19                 if(w[i][0]==w[k][j])
    20             {
    21                 int l1=j,l2=0;
    22                 while(w[i][l2]==w[k][l1]&&l1<w[k].length())l1++,l2++;//比较至词尾
    23                 if(l1>=w[k].length())//如果比较完成
    24                 {
    25                     now+=w[i].length()-l2;//新单词减去与上个单词重合的长度
    26                     use[i]++;
    27                     dfs(i);//以这个单词为新节点搜索
    28                     now-=w[i].length()-l2;
    29                     use[i]--;
    30                 }
    31             }
    32         }
    33     }
    34 }
    35 int main()
    36 {
    37     cin>>n;
    38     for(int i=1;i<=n;i++)
    39         cin>>w[i];
    40     cin>>w[0];//**把头字母看做一个单词**
    41     dfs(0);//**从头字母这个单词搜索**
    42     cout<<ans;
    43     return 0;
    44 }/*我无聊呀,无聊!一袋恰恰香瓜子,我一个人嗑完了,一共1869颗,21颗是空的,混进来9颗带虫的,还有6颗没炒开,是连在一起的,还有4个是苦的。中间喝了7杯水。没错,这就是孤独。…刚才这一段话一共67个字,11个标点符号,其中8个逗号,3个句号,一共有587划,其中横78划,竖137划,撇65划,捺57划,其他139划。没错这就是闲人的最高境界难过同意的来个赞赞?(?ε`)
    45 
    46 
    47 
    48 顺便无聊一下*/
    View Code
  • 相关阅读:
    模块
    time/datetime/random/string/os/sys/shutil/zipfile/tarfile
    模块
    模块
    模块
    2.1
    1.4
    生成器 迭代器
    闭包 装饰器
    函数
  • 原文地址:https://www.cnblogs.com/dfzg/p/7291745.html
Copyright © 2011-2022 走看看