HDU 1251 统计难题 (Trie树模板题)
题目链接:点击打开链接
注意:本题只有一组测试数据,处理到文件结束.
注意:本题只有一组测试数据,处理到文件结束.
题意:Trie树模板题,统计出现次数,注意注释
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 400000 + 20;
int tot;
char s[maxn];
int num[maxn] = {0};//前缀末尾编号为i的单词数量。
int trie[maxn][26];
//trie[i][j] = k表示编号为i的节点的第j个孩子(内容为j的孩子)是编号为k的节点
//编号为整棵树中的编号, 内容是值的编号,如小写字母的字典树中,'b'的编号为'b' - 'a' = 1;
void insert(char s[]){//插入单词s
int root = 0;//从整颗字典树的根节点开始找起,整颗字典树的根节点的编号为0
int len = strlen(s);
for(int i = 0; i < len; i++){
int id = s[i] - 'a';
if(!trie[root][id]) trie[root][id] = tot++;//如果之前没有从root到id过,自己创建一个。
//tot为整棵树中的编号,为全局变量,编到几就是几
root = trie[root][id];//无论从root到id的边是否之前存在,下一步都要往下走
num[root]++;//每次沿字典树输入一个单词,都让相应编号的num++,方便输出以某字符串为前缀的单词数
}
}
int find(char s[]){
//前缀查找函数,注意:查找前缀是否存在与查找单词是否存在不同!
//如:空字典树中插入apple , applese 存在前缀app,但是不存在单词app!
//如果要查找单词,对应的insert函数要加入一个bool的v[i]标志:编号i的节点是单词结束的标志,find函数怎么改你懂的
int root = 0;//依然是从根节点开始查找
int len = strlen(s);
for(int i = 0; i < len; i++){
int id = s[i] - 'a';
if(!trie[root][id]) return 0;
root = trie[root][id];
}
return num[root];
}
int main(){
memset(trie, 0 , sizeof(trie));//初始化很重要
tot = 1; //上面insert中为 tot++ , 所以这里应该初始化为1
while(gets(s)){//只有gets才能在遇到回车的时候返回长度为0的空串,gets同时也能记录空格
if(strcmp(s,"")==0) break;//学会此处的输入方法:若字符串长度为0或者输入的为空格,结束循环.
//strcmp(str1, str2) 若str1 == str2返回0, 若前者字典序大,返回正数, 否则返回负数
insert(s);
}
//for(int i = 0; i < tot; i++)printf("num[%d]:%d\n", i, num[i]);
//for(int i = 0; i < tot; i++)for(int j = 0; j < 26; j++) if(trie[i][j])printf("trie[%d][%c] = %d\n", i, j+'a', trie[i][j]);
while(~scanf("%s",s)){
printf("%d\n", find(s));
}
return 0;
}
HDU 1251 统计难题 (Trie树模板题)的更多相关文章
- hdu 1251 统计难题 (字典树入门题)
/******************************************************* 题目: 统计难题 (hdu 1251) 链接: http://acm.hdu.edu. ...
- hdu 1251 统计难题 字典树第一题。
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- HDU - 1251 统计难题(trie树)
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input输入数据的第一部 ...
- HDU 1251 统计难题 字典树大水题
今天刚看的字典树, 就RE了一发, 字典树原理还是很简单的, 唯一的问题就是不知道一维够不够用, 就开的贼大, 这真的是容易MLE的东西啊, 赶紧去学优化吧. HDU-1251 统计难题 这道题唯一的 ...
- hdu 1251 统计难题(trie树入门)
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- hdu -1251 统计难题(字典树水题)
http://acm.hdu.edu.cn/showproblem.php?pid=1251 建树之后 查询即可. G++提交 ME不知道为什么,c++就对了. #include <iostre ...
- HDU 1251 统计难题(Trie)
统计难题 [题目链接]统计难题 [题目类型]Trie &题解: Trie的模板题,只不过这题坑点在没给数据范围,改成5e5就可以过了,用的刘汝佳蓝书模板 &代码: #include & ...
- hdu 1251 统计难题 (字典树(Trie)<PS:C++提交不得爆内存>)
统计难题Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submis ...
- hdu 1251 统计难题 trie入门
统计难题 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本 ...
- HDOJ/HDU 1251 统计难题(字典树啥的~Map水过)
Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己 ...
随机推荐
- docker-bind挂载
使用绑定挂载 自Docker早期以来,绑定挂载一直存在.与卷相比,绑定装载具有有限的功能.使用绑定装入时,主机上的文件或目录将装入容器中.文件或目录由其在主机上的完整路径或相对路径引用.相反,当您使用 ...
- Deepin Linux 实体机安装
Deepin Linux 实体机安装 1.下载ISO镜像并刻录到U盘上 系统ISO镜像下载 深度技术 刻录工具下载 深度技术(下方有深度启动盘制作工具下载) 这两个都下载好之后,打开刻录工具,选择镜像 ...
- opencv利用svm训练
]]]]]])rand2 = np.array([[]]]]]])label = np.array([[]]]]]]]]]]])data = np.vstack((rand1]]])pt_data = ...
- mongo windows 安装
下载安装包 一路next 打开cmd 或者 power shell 准备本地目录. D: #进入d盘 md data #创建目录 data cd data #进入目录 data md config # ...
- mysql 多主一从
一.主服务器准备 1.1.环境准备 两台主机器ip分别为 100.100.100.105 (主1) 100.100.100.106(主2) 安装 mysql [root@centos ~]# yum ...
- SPFA判负环模板
void DFS_SPFA(int u){ if(flag) return; vis[u]=true; for(int i=head[u];i;i=edges[i].nxt){ if(fl ...
- Java 使用Scanner时的NoSuchElementException异常
做实验时设计了一个类,在类中的两个不同函数中分别创建了两个Scanner对象,并且在各个函数的结尾使用了close()方法,结果在运行时产生了NoSuchElementException异常. 实验的 ...
- 基于iTextSharp的PDF操作(PDF打印,PDF下载)
基于iTextSharp的PDF操作(PDF打印,PDF下载) 准备 1. iTextSharp的简介 iTextSharp是一个移植于java平台的iText项目,被封装成c#的组件来用于C#生成P ...
- Java入门 - 高级教程 - 05.网络编程
原文地址:http://www.work100.net/training/java-networking.html 更多教程:光束云 - 免费课程 网络编程 序号 文内章节 视频 1 概述 2 Soc ...
- 微服务的多数据源配置: step 1
spring boot + mybatis: 实现的功能点: 多数据源 jdbc: spring.datasource.test1.url = jdbc:mysql://localhost:3306/ ...