http://acm.hdu.edu.cn/showproblem.php?pid=2072

题意:中文题目不需要说了!~自己注意一下他输入要求:一行表示一篇文章。

这几天都在刷字典树的题,测试测试自己的模板合适不合适。模板倒是合适的,但是却发现自己在处理数据上容易犯下一些细节错误!~

特在此写下来,谨记自己!~

这份代码是一发就过的:

  1 #include<cstdio>
  2 #include<string.h>
  3 #include<algorithm>
  4 using namespace std;
  5 const int MAX=26;
  6 const int maxn=1e4+100;
  7 int N;
  8
  9 struct Trie
 10 {
 11     Trie *next[MAX];
 12     int v;///v要灵活使用,具体情况具体分析
 13 };
 14 Trie *root;
 15 int Get_ID(char c)
 16 {
 17     return c-'a';
 18 }///得到字符的id
 19
 20 void init()///初始化根节点
 21 {
 22     root=(Trie *)malloc(sizeof(Trie));
 23     for(int i=0; i<MAX; i++)
 24         root->next[i]=NULL;
 25     root->v=0;
 26 }
 27 int deal(Trie *p)///删除指针,释放空间,有些题要释放空间不让会MLE
 28 {
 29     if(p==NULL)
 30         return 0;
 31     for(int i=0; i<MAX; i++)
 32     {
 33         if(p->next[i]!=NULL)
 34             deal(p->next[i]);
 35     }
 36     free(p);
 37     return 0;
 38 }
 39 void Insert(char s[])///字典树的建立
 40 {
 41     Trie *p=root;
 42     int len_s=strlen(s);
 43     for(int i=0; i<len_s; i++)
 44     {
 45         int id=Get_ID(s[i]);
 46         if(p->next[id]==NULL)
 47         {
 48             Trie *q=(Trie *)malloc(sizeof(Trie));
 49             for(int j=0; j<MAX; j++)
 50                 q->next[j]=NULL;
 51             q->v=0;
 52             p->next[id]=q;
 53         }
 54         p=p->next[id];
 55     }
 56     p->v=1;
 57 }
 58 int Search(char s[])///查找,看是否有条件满足
 59 {
 60     Trie *p=root;
 61     int len_s=strlen(s);
 62     for(int i=0; i<len_s; i++)
 63     {
 64         int id=Get_ID(s[i]);
 65         if(p->next[id]==NULL)
 66             return 0;///没有找到以s为前缀的字符串
 67         p=p->next[id];
 68     }
 69     if(p->v)
 70         return 1;///找到了以s串味前缀的字符串
 71     return 0;
 72 }
 73 int main()
 74 {
 75     char str[maxn];
 76     while(gets(str))
 77     {
 78         if(str[0]=='#')
 79             break;
 80         deal(root);
 81         init();
 82         int ans=0;
 83         int len=strlen(str);
 84         for(int i=0; i<len; i++)
 85         {
 86             char s[100];
 87             int cnt=0;
 88             if(str[i]>='a'&&str[i]<='z')
 89             {
 90                 while(str[i]>='a'&&str[i]<='z')
 91                 {
 92                     s[cnt]=str[i];
 93                     cnt++;
 94                     i++;
 95                 }
 96                 s[cnt]='\0';
 97                 if(!Search(s))
 98                 {
 99                     ans++;
100                     Insert(s);
101                 }
102             }
103         }
104         printf("%d\n",ans);
105     }
106     return 0;
107 }

代码

下面这份是发现一些细节上的问题,之后改正了,才AC了的。

  1 #include<cstdio>
  2 #include<string.h>
  3 #include<algorithm>
  4 using namespace std;
  5 const int MAX=26;
  6 const int maxn=1e4+100;
  7 int N;
  8
  9 struct Trie
 10 {
 11     Trie *next[MAX];
 12     int v;///v要灵活使用,具体情况具体分析
 13 };
 14 Trie *root;
 15 int Get_ID(char c)
 16 {
 17     return c-'a';
 18 }///得到字符的id
 19
 20 void init()///初始化根节点
 21 {
 22     root=(Trie *)malloc(sizeof(Trie));
 23     for(int i=0; i<MAX; i++)
 24         root->next[i]=NULL;
 25     root->v=0;
 26 }
 27 int deal(Trie *p)///删除指针,释放空间,有些题要释放空间不让会MLE
 28 {
 29     if(p==NULL)
 30         return 0;
 31     for(int i=0; i<MAX; i++)
 32     {
 33         if(p->next[i]!=NULL)
 34             deal(p->next[i]);
 35     }
 36     free(p);
 37     return 0;
 38 }
 39 void Insert(char s[])///字典树的建立
 40 {
 41     Trie *p=root;
 42     int len_s=strlen(s);
 43     for(int i=0; i<len_s; i++)
 44     {
 45         int id=Get_ID(s[i]);
 46         if(p->next[id]==NULL)
 47         {
 48             Trie *q=(Trie *)malloc(sizeof(Trie));
 49             for(int j=0; j<MAX; j++)
 50                 q->next[j]=NULL;
 51             q->v=0;
 52             p->next[id]=q;
 53         }
 54         p=p->next[id];
 55
 56     }
 57     p->v=1;
 58 }
 59 int Search(char s[])///查找,看是否有条件满足
 60 {
 61     Trie *p=root;
 62     int len_s=strlen(s);
 63     for(int i=0; i<len_s; i++)
 64     {
 65         int id=Get_ID(s[i]);
 66         if(p->next[id]==NULL)
 67             return 0;///没有找到以s为前缀的字符串
 68         p=p->next[id];
 69     }
 70     if(p->v)
 71         return 1;///找到了以s串味前缀的字符串
 72     return 0;
 73 }
 74 int main()
 75 {
 76
 77     char str[maxn];
 78     init();
 79     while(gets(str))
 80     {
 81         if(str[0]=='#')
 82             break;
 83         deal(root);
 84         init();
 85         int ans=0;
 86         int len=strlen(str);
 87         for(int i=0; i<len; i++)
 88         {
 89             char s[100];
 90             int cnt=0;
 91             while(str[i]>='a'&&str[i]<='z')
 92             {
 93                 s[cnt]=str[i];
 94                 cnt++;
 95                 i++;
 96             }
 97             s[cnt]='\0';
 98             if(cnt&&!Search(s))///这里要判断cnt是否为0,
 99             {               ///因为如果为0.我们肯定查找不到,从而使答案多加1了
100                 ans++;      ///算是一个小细节吧!
101                 Insert(s);
102             }
103         }
104         printf("%d\n",ans);
105     }
106     return 0;
107 }

代码2

怎么感觉自己每次都不能一次AC,每次都会在细节上出点错误!~好心痛啊,哎~仔细啊~仔细~

转载于:https://www.cnblogs.com/Y-Meng/p/8595606.html

HDU2072 单词数(字典树)相关推荐

  1. HDU2072 单词数(解法二)【废除!!!】

    本文废除!!! 参考链接:HDU2072 单词数[水题] 问题链接:HDU2072 单词数. 问题描述:参见上文. 问题分析:这是一个比较简单的问题,一行一行读入字符串,统计该行有几个单词.单词之间只 ...

  2. HDU2072 单词数【水题】

    单词数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. hdu4099(斐波那契数+字典树)

    题意: 给出一个数字n,在斐波那契数列中找到一个最小下标,满足这个斐波那契数是以n为前缀,输出这个下标. 思路: 高精度+字典树+1000000000000000进制.后来知道在斐波那契数很大的时候, ...

  4. 648. 单词替换 : 字典树的经典运用

    题目描述 这是 LeetCode 上的 648. 单词替换 ,难度为 中等. Tag : 「字典树」 在英语中,我们有一个叫做 词根(root) 的概念,可以词根后面添加其他一些词组成另一个较长的单词 ...

  5. hdu2072单词数(思维)

    Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...

  6. HDU-2072 单词数 水题一枚

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2072 map判重即可: 1 //STATUS:G++_AC_0MS_376KB 2 #include& ...

  7. leetcode 212. 单词搜索 II 字典树+深度优先搜索 java代码 详细解释

    给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格 ...

  8. 字典树实现_【Leetcode每日打卡】单词的压缩编码 Trie(字典树)入门

    一.前言(鸡汤(一段废..话..可以跳过啦)) 同学们好!没想到我这个小小的公众号破千粉啦,对于大佬们而言或许不值一提,但是对我而言是一个莫大的鼓舞!更加坚定了我持续输出优质内容的决心.希望我们都能每 ...

  9. gym:Problem B Bless You Autocorrect!(字典树+最短路)

    2016-2017-acmicpc-nordic-collegiate-programming-contest-ncpc-2016 Problem B Bless You Autocorrect! 题 ...

  10. 字符串处理【字典树】 - 原理 字典树详解

    字符串处理[字典树] - 原理 字典树详解 字典树,又称Trie树.单词查找树,是一种树形结构,也是哈希树的一种变种,主要用于统计.排序和存储大量的字符串(但不限于字符串),所以经常被搜索引擎系统用于 ...

最新文章

  1. 应用层下的人脸识别(四):人脸研判
  2. 细说Asp.net的IP地址屏蔽功能设计
  3. 【LOJ】#3098. 「SNOI2019」纸牌
  4. Maven根据不同环境打包不同配置文件
  5. CNCC 技术论坛 | 知识图谱赋能数字经济
  6. 中国股市悬着四把利剑
  7. 【Kafka】Kafka Streams简介
  8. codevs 5958 无
  9. Java 数组转字符串
  10. Redis的安装(windows)
  11. UniCode编码表 对照表
  12. java蓝牙串口调试,安卓版蓝牙串口调试助手(源码)
  13. python测试工程师简历模板_自动化测试工程师简历专业技能怎么写
  14. 物联那点事儿之自制网络温湿度计(arduino+点灯科技篇)
  15. 【GPT-4】立即停止训练比 GPT-4 更强的模型,至少六个月!马斯克、图灵奖得主等数千 AI 专家紧急呼吁
  16. 固态硬盘安装--系统迁移--设置引导启动项
  17. html如何设置radio单选按钮默认选中效果
  18. 2020中老年直播/短视频用户争夺新战局观察
  19. 锐捷三层交换机route-map设置
  20. 被字句15个_把字句改成被字句

热门文章

  1. NIO,一本难念的经——分布式系统基础
  2. Android应用程序组件Content Provider简要介绍和学习计划 .
  3. 网上商城后台架构设计
  4. 我们需要什么样的计算
  5. 编程之美读书笔记1.8 - 小飞的电梯调度算法
  6. 数据挖掘前景及工作方向选择
  7. 澳洲大学计算机本科课程,澳洲留学 澳洲大学的本科课程分为6大类
  8. java 计算器 junit测试_测试工具之JUnit4 结合Mockito模拟测试代码
  9. mysql 输入密码后闪退_iPhone抹除还原后需要输入账号密码怎么办?
  10. Harmony OS — ListContainer列表