HDU 1251 统计难题——字典树
来源:互联网 发布:淘宝手淘在哪里进入 编辑:程序博客网 时间:2024/06/01 08:20
题意:
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
注意:本题只有一组测试数据,处理到文件结束.
对于每个提问,给出以该字符串为前缀的单词的数量.
思路:
字典树维护前缀数量,具体参考代码:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int next_cnt = 30;const int maxn = 1e6 + 10;int trie_cnt = 0;struct Trie { int tag, next[next_cnt]; void init() { tag = 0; memset(next, -1, sizeof(next)); }}trie[maxn];void init() { trie_cnt = 0; trie[0].init();}void update(char *str) { int len = strlen(str), root = 0; for (int i = 0; i < len; i++) { int temp = str[i] - 'a'; int next = trie[root].next[temp]; if (next == -1) { next = ++trie_cnt; trie[next].init(); trie[root].next[temp] = next; } root = next; trie[root].tag++; }}int query(char *str) { int len = strlen(str), root = 0; for (int i = 0; i < len; i++) { int temp = str[i] - 'a'; int next = trie[root].next[temp]; if (next == -1) { return 0; } root = next; } return trie[root].tag;}int main(){ char str[20]; init(); while (gets(str) != NULL && str[0] != '\0') { update(str); } while (gets(str) != NULL) { printf("%d\n", query(str)); } return 0;}
阅读全文
1 0
- 字典树——统计难题 ( HDU 1251 )
- HDU 1251 统计难题——字典树
- HDU 1251 统计难题 字典树
- HDU 1251统计难题(字典树)
- [字典树 ]hdu 1251 统计难题
- 统计难题 hdu 1251 字典树
- hdu 1251 统计难题 字典树
- HDU 1251 统计难题 -- 字典树
- HDU 1251 统计难题(字典树)
- hdu 1251 统计难题(字典树)
- hdu 1251 统计难题(字典树)
- hdu 1251 统计难题(字典树)
- hdu-1251-统计难题(字典树)
- hdu 1251 统计难题 (字典树)
- HDU 1251统计难题 字典树
- hdu 1251 统计难题 (字典树)
- HDU 1251 统计难题(字典树)
- hdu 1251 统计难题 字典树
- 《剑指offer》牛客网java题解-替换空格
- opencv直方图变换
- Linux网卡的配置文件详解及应用
- Leetcode-11: Container With Most Water
- Eclipse+Maven搭建Spring+SpringMVC+Mybatis项目
- HDU 1251 统计难题——字典树
- 踮起回望,有关Servlet的笔记
- 开发天气App
- 引用传递和值传递
- hbase org.apache.hadoop.hbase.PleaseHoldException: Master is initializing 报错处理
- BP神经网络
- 疯狂队列
- Threading and Queues -- Tensorflow
- JavaScript趣味编程--仿微信飞机大战游戏--3.让飞机在随机位置产生