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

 

转载于:https://www.cnblogs.com/dfzg/p/7291745.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值