Intelligent IME HDU - 4287 字典树
题意:
给你m个字符串,每一个字符对应一个数字,如下:
2 : a, b, c 3 : d, e, f 4 : g, h, i 5 : j, k, l 6 : m, n, o 7 : p, q, r, s 8 : t, u, v 9 : w, x, y, z
输入n个数字串,问这个数字串可以对应几个字符串
比如ade这个字符串对应的数字串就是233
题解:
用这m个字符串建立一颗字典树,对于每一个节点维护一个变量val,他就代表(从树根到这个节点这一个数字串)有多少个对应的字符串
每次插入的时候记录一下最大值就完了
代码:
1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <cstdlib>
5 #include <algorithm>
6 using namespace std;
7 typedef struct Trie* TrieNode;
8 char s[130];
9 char v[5005][10];
10 struct Trie
11 {
12 int val;
13 TrieNode next[8];
14 Trie()
15 {
16 val = 0;
17 memset(next,NULL,sizeof(next));
18 }
19 };
20
21 void inserts(TrieNode root,char ss[10])
22 {
23 TrieNode p = root; //建立的字典树是字符串对应的数字串
24 int len=strlen(ss);
25 for(int i=0;i<len;++i)
26 {
27 int temp=s[ss[i]];
28 if(p->next[temp]==NULL) p->next[temp]=new struct Trie();
29 p=p->next[temp];
30 }
31 p->val+=1;
32 }
33
34 int query(TrieNode root,char ss[10])
35 {
36 TrieNode p = root;
37 int len=strlen(ss);
38 for(int i=0;i<len;++i)
39 {
40 int temp=ss[i]-'0'-2;
41 if(p->next[temp]==NULL)
42 {
43 //printf("%d**\n",i);
44 return 0;
45 }
46 else
47 {
48 p=p->next[temp];
49 }
50 }
51 return p->val;
52 }
53
54 void Del(TrieNode root)
55 {
56 for(int i=0 ; i<8 ; ++i)
57 {
58 if(root->next[i])Del(root->next[i]);
59 }
60 delete(root);
61 }
62
63 int main()
64 {
65 s['a']=s['b']=s['c']=0;
66 s['d']=s['e']=s['f']=1;
67 s['g']=s['h']=s['i']=2;
68 s['j']=s['k']=s['l']=3;
69 s['m']=s['n']=s['o']=4;
70 s['p']=s['q']=s['r']=s['s']=5;
71 s['t']=s['u']=s['v']=6;
72 s['w']=s['x']=s['y']=s['z']=7;
73 int t,n,m;
74 char ss[10];
75 scanf("%d",&t);
76 while(t--)
77 {
78 TrieNode root = new struct Trie();
79 scanf("%d %d",&n,&m);
80 for(int i=0 ; i<n ; ++i)
81 {
82 scanf("%s",v[i]);
83 }
84 for(int i=0 ; i<m ; ++i)
85 {
86 scanf("%s",ss);
87 inserts(root,ss);
88 }
89 for(int i=0;i<n;++i)
90 {
91 printf("%d\n",query(root,v[i]));
92 }
93 Del(root);
94 }
95 return 0;
96 }
Intelligent IME HDU - 4287 字典树的更多相关文章
- HDU 5687 字典树插入查找删除
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5687 2016百度之星资格赛C题,直接套用字典树,顺便巩固了一下自己对字典树的理解 #include< ...
- HDU 5384 字典树、AC自动机
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5384 用字典树.AC自动机两种做法都可以做 #include<stdio.h> #includ ...
- hdu 2112(字典树+最短路)
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 2072(字典树模板,set,map均可做)
地址:http://acm.hdu.edu.cn/showproblem.php?pid=2072 lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词 ...
- Chip Factory HDU - 5536 字典树(删除节点|增加节点)
题意: t组样例,对于每一组样例第一行输入一个n,下面在输入n个数 你需要从这n个数里面找出来三个数(设为x,y,z),找出来(x+y)^z(同样也可以(y+z)^1)的最大值 ("^&qu ...
- hdu 1251 字典树的应用
这道题看了大神的模板,直接用字典树提交的会爆内存,用stl 里的map有简单有快 #include <iostream> #include <map> #include < ...
- hdu 2896 字典树解法
#include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> ...
- Repository HDU - 2846 字典树
题意:给出很多很多很多很多个 单词 类似搜索引擎一下 输入一个单词 判断有一个字符串包含这个单词 思路:字典树变体,把每个单词的后缀都扔字典树里面,这里要注意dd是一个单词 但是把d 和dd都放字典树 ...
- Phone List HDU - 1671 字典树
题意:给出一堆一组一组的数字 判断有没有哪一个是另外一个的前缀 思路:字典树 插入的同时进行判断 不过 当处理一组数字的时候 需要考虑的有两点1.是否包含了其他的序列2.是否被其他序列包含 刚开始 ...
随机推荐
- 通用寄存器_MOV_ADD_SUB_AND_OR_NOT
通用寄存器 MOV指令 注意:目标操作数与操作数宽度必须一样 MOV 目标操作数,源操作数 作用:拷贝源操作数到目标操作数 1.源操作数可以是立即数.通用寄存器.段寄存器.或者内存单元. 2.目标操作 ...
- 两万字长文总结,梳理 Java 入门进阶那些事
大家好,我是程序员小跃,一名在职场已经写了6年程序的老程序员,从一开始的菊厂 Android 开发到现在某游戏公司的Java后端架构,对Java还是相对了解的挺多. 大概是半年前吧,在知乎上有个知友私 ...
- 【Android】编译报错 Annotation processors must be explicitly declared now 解决方案
问题 在网上下载一个demo,因为版本久远,里面添加了本地 Butter Knife 的jar包,在编译时报错 Annotation processors must be explicitly dec ...
- 手写Netty之多路复用Select小案例
注意:本文只是将上文多路复用器Select.Poll.Epoll区别梳理中提出的概念与Netty中的步骤联系起来,方便后面回顾,代码中注释很多,对于大家来说如果不是怀有同样的目的,不一定有用. 单线程 ...
- IDEA安装问题解决
一,安装正确的jdk和idea版本 首先在控制面查看电脑位数,电脑是64位的,安装64位的jdk和idea 二.打开正常的快捷键 有两个启动项,打开对应位数的 三,权限问题 如果弹出不能加载jvm的提 ...
- JVM虚拟机垃圾回收(GC)算法及优缺点
一.什么是GC GC是jvm的垃圾回收,垃圾回收的规律和原则为: 次数上频繁收集新生区(Young) 次数上较少收集养老区(Old) 基本上不动永久区(Perm) 二.GC算法(分代收 ...
- https://www.cs.cmu.edu/~dga/papers/cuckoo-conext2014.pdf 检验hash冲突
https://github.com/google/cityhash We like to test hash functions with SMHasher, among other things. ...
- Trie 前缀树或字典树 确定有限状态自动机
https://zh.wikipedia.org/wiki/Trie 应用 trie树常用于搜索提示.如当输入一个网址,可以自动搜索出可能的选择.当没有完全匹配的搜索结果,可以返回前缀最相似的可能.[ ...
- TCP连接的超时时间
无论你用任何语言或者是网络库,你都可以设置网络操作的超时时间,特别是connect.read.write的超时时间. 你可以在代码中把超时时间设置任意大小值,但是connect方法会有一点特殊. co ...
- Redis-第六章节-事务
目录 简介 执行过程 特点 案例 watch 简介 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit). 执行 ...