题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=1671

分析:字典树题目变种,这里的字典树指的是0--9的变化。基本原理没有大的变化就是字典树查找。

(1)这道题就是找到这组电话号码中是否有 某个电话号码的前n-1个子串是否由其他的电话号码组成。是就输出NO,否就输出YES.题目大意很简单,字典树时的使用就是套模板,做这种题第一次最好自己写一遍模板,以后自己可以直接使用自己的模板。我的字典树模板见 字典树模板。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXNUM 10
using namespace std;//定义字典树
typedef struct Trie
{bool flag;//从根到此是否为一个单词Trie *next[MAXNUM];
}Trie;Trie *root;void init()
{root = (Trie *)malloc(sizeof(Trie));root->flag=false;for(int i=0;i<MAXNUM;i++)root->next[i]=NULL;
}void insert(char *word)
{Trie *tem = root;while(*word!='\0'){if(tem->next[*word-'0']==NULL){Trie *cur = (Trie *)malloc(sizeof(Trie));for(int i=0;i<MAXNUM;i++)cur->next[i]=NULL;cur->flag=false;tem->next[*word-'0']=cur;}tem = tem->next[*word-'0'];word++;}tem->flag=true;
}bool search(char *word)
{Trie *tem = root;for(int i=0;word[i]!='\0';i++){if(tem==NULL||tem->next[word[i]-'0']==NULL)return 0;tem=tem->next[word[i]-'0'];}return tem->flag;
}void del(Trie *cur)
{for(int i=0;i<MAXNUM;i++){if(cur->next[i]!=NULL)del(cur->next[i]);}free(cur);
}
int main()
{int t,n;bool flag;char phone_num[10005][20];char num[20];scanf("%d",&t);while(t--){init();flag = true;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%s",phone_num[i]);insert(phone_num[i]);}for(int i=0;i<n;i++){int len = strlen(phone_num[i]);memset(num,'\0',sizeof(num));for(int j=0;j<len-1;j++){num[j]=phone_num[i][j];if(search(num)){flag = false;break;}}}if(flag)printf("YES\n");else printf("NO\n");del(root);}return 0;
}

转载于:https://www.cnblogs.com/newpanderking/archive/2012/11/03/2752626.html

hdu 1671 Phone List (字典树)相关推荐

  1. [ACM] hdu 1671 Phone List (字典树)

    [ACM] hdu 1671 Phone List (字典树) Phone List Problem Description Given a list of phone numbers, determ ...

  2. hdu 1671 Phone List 字典树模板

    Given a list of phone numbers, determine if it is consistent in the sense that no number is the pref ...

  3. HDU - 1251 统计难题(字典树)

    题目链接:点击查看 题目大意:给出一些单词,后续再给出一些前缀,询问包含此前缀的单词一共有多少个 题目分析:这个题目的数据可能有点水,而且时间给的也很足,给了两秒,而且加上是hdu的,可以用无序map ...

  4. hdu 1251 统计难题 (字典树入门题)

    1 /******************************************************* 2 题目: 统计难题 (hdu 1251) 3 链接: http://acm.hd ...

  5. HDU 1251 统计难题 字典树/STL

    统计难题 Time Limit:2000MS     Memory Limit:65535KB     64bit IO Format:%I64d & %I64u Description Ig ...

  6. HDU 5536 Chip Factory 字典树+贪心

    给你n个数,a1....an,求(ai+aj)^ak最大的值,i不等于j不等于k 思路:先建字典树,暴力i,j每次删除他们,然后贪心找k,再恢复i,j,每次和答案取较大的,就是答案,有关异或的貌似很多 ...

  7. HDU - 4825 Xor Sum(字典树)

    题目链接:点击查看 题目大意:给出n个数组成的数组,再给出m个询问,每次询问给出一个x,要求从数组中选出一个k,使得k^x的值最大 题目分析:字典树求异或值最大的模板题,对于n个数直接insert到字 ...

  8. hdu 5384 Danganronpa(字典树)

    题意: f(A,B)表示:B在A中作为子串出现的次数. 题目给出n个证据,m个子弹 Ai是证据.Bi是子弹.题目问:全部Bi对每一个Ai造成的伤害是多少,即每一个Bi在Ai中出现的次数总和. 解析: ...

  9. 2019 杭电多校 HDU - 6625 three arrays 字典树+贪心

    题目链接:https://cn.vjudge.net/problem/HDU-6625 题意:a和b两个数组n个数,数字任意组合异或,求得到c数组的字典序最小 题解:对于两个数组从高位到低位建立两个字 ...

  10. HDU 5687 Problem C 字典树

    Problem C Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tota ...

最新文章

  1. 数量庞大!中国成长型AI企业研究报告
  2. 介绍十种数据恢复的软件工具
  3. python北京理工大学推荐的书-Python语言程序设计
  4. HDLBits答案(13)_Verilog移位寄存器附加题
  5. fgets阻塞 stdin 退出_来自stdin问题的fgets[c]
  6. g开头的C语言编程软件,C语言函数大全(g开头)
  7. 设计灵感|电商美工,年年都能借鉴的新年
  8. 平均薪资 38.4 万!3 步教你成为区块链开发者,收好这份学习指南!
  9. html页面缩小布局乱了为什么啊_PPT页面总是太空?这4个方法,让你的PPT增加亿点点细节!...
  10. 基于springboot+vue的公益慈善捐助网站(前后端分离)
  11. Linux上用于Json数据处理并导入Mysql的几个有用Python脚本
  12. b、blockquote、base、bdo、big、标签
  13. 安恒6月月赛 DASCTF 6th Re 部分wp
  14. 岁月温柔-6 出院后忐忑不安的妈妈
  15. 12306查询车票(爬虫小练_1)
  16. Unlock_ALD程序,用于解锁由 Adob​​e 产品
  17. 动力学方程的数值解(动力学方程+行星运动轨道)
  18. 浏览器(Browser) WebSql 学习笔记
  19. [论文阅读]InstructGPT(Training language models to follow instructions with human feedback)
  20. pip更新超时失败之解法

热门文章

  1. Windows核心编程_Edit控件无法输入问题
  2. 从0开始html前端页面开发_CSS实现设置背景图自适应屏幕大小
  3. 【HeadFirst 设计模式学习笔记】9 迭代器模式
  4. 雷蛇在天猫618大爆发,雷军第二天就找其创始人取经
  5. Linux(CentOS7)下安装mysql
  6. WordPress源代码研究-插件机制
  7. redis java操作
  8. 日志打印,设置开关类【编程技巧】
  9. ASP获取真实IP地址
  10. Docker笔记01-发布一个dotnetcore应用