字典树模板 HDU1251
时间:2020-05-28
本文章向大家介绍字典树模板 HDU1251,主要包括字典树模板 HDU1251使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251
样例:
最简单的单词插入,来建立字典树
字典树的本质是模仿人查字典的时候依次检索的过程
#include <iostream> #include <string> #include <stdio.h> #include <cstring> using namespace std; int tree[1000100][26];//用来记录字典树当前字母的位置 int num[1000100];//记录以某一字符串为前缀的单词数量 int pos = 1;//当前新分配的存储位置,把每个树枝节点都用pos用一个数字表示 void insert(char s[]) { int p = 0;//当前位置(最起始) for (int i = 0; i < strlen(s); i++) { int n = s[i] - 'a';//把字母数字化 if (tree[p][n] == 0)//如果对应的字符还没有值 { pos++;//更新pos,创建一个新的位子表示这个分支 tree[p][n] = pos;//tree中记录 } p = tree[p][n];//把下一次访问位置改为tree[p][n]的 num[p]++;//计数,经过了这里几次 } } int count(char s[]) { int p = 0; for (int i = 0; i < strlen(s); i++) { int n = s[i] - 'a'; if (tree[p][n] == 0)//要查找的前缀有一个字母在字典树中没有出现过,说明查无此字符 { return 0; } p = tree[p][n];//逐渐深入字典树 } return num[p];//检索完前缀后,输出最后一个前缀字母的num } int main() { char s[20]; while (gets(s)) { if (!strlen(s)) break;//为0说明输入的是空行 insert(s); } while (gets(s)) { cout << count(s) << endl; } return 0; }
原文地址:https://www.cnblogs.com/Knightero/p/12979565.html
- 【一起学Python】爬取网易云歌词
- Hadoop离线数据分析平台实战——370外链信息分析Hadoop离线数据分析平台实战——370外链信息分析
- POJ 1067 取石子游戏
- 【一起学Python】STEAM游戏评测爬虫
- Open Judge 2750 鸡兔同笼
- POJ 1017 Packets
- Hadoop离线数据分析平台实战——380MapReduce程序优化Hadoop离线数据分析平台实战——380MapReduce程序优化
- 配置远程访问Jupyter+腾讯云超划算活动上车
- HDU 4256 The Famous Clock
- ZOJ 1403&&HDU 1015 Safecracker【暴力】
- Torch7搭建卷积神经网络详细教程
- 爬虫入门到精通-HTTP协议的讲解
- 批量替换文件名和文本文件内容mac
- 抓取手机app的数据(摩拜单车)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JDK 8 新特性 之 default关键字
- 设计模式 之 单例模式
- SpringBoot 配置多数据源
- git pull 报错:The following untracked working tree files would be overwritten by merge
- Docker 使用Dockerfile构建Docker(三)
- Docker-compose 安装与基本使用(四)
- Docker-compose 常用命令及网络设置(五)
- HashMap 源码分析
- Java 按位运算符(&,|,^,>>,<<,>>>)
- LinkedList 源码分析
- Logstash:多个配置文件(conf)
- ArrayList 源码分析
- IllegalArgumentException:argument type mismatch
- String equals()方法 源码分析
- centos7宝塔环境安装VeryNginx waf系统实现高级防火墙功能