HDU-1251 统计难题,字典树或者map!
统计难题
很久就看过这个题了,但不会~~~不会~~
题意:给出一张单词表,然后下面有若干查询,每次给出一个单词,问单词表中是否存在以这个单词为前缀的单词,输出数量。本身也是自身的前缀。只有一组数据!
思路:用gets或输入字符都行。如果输入字符可以用map存图,维护每个单词的所有前缀,直接查找就行。要么就用字典树建图,路径每经过一次就加1,如果是新节点直接附为1。查找时要注意是否存在查找单词的指针,不存在或者为空直接返回0,因为没有给其赋值。空间复杂度26^i,i为单词的长度,相当于26叉树。
struct Tree
{
int f;
Tree *next[N];
};
void insert(Tree *root,char *s)
{
if(root==NULL||*s=='\0') return ;
Tree *q=root;
while(*s!='\0')
{
if(q->next[*s-'a']==NULL)//节点不存在,建立新的节点
{
Tree *temp=new Tree;
for(int i=0;i<N;i++) temp->next[i]=0;
temp->f=1;
q->next[*s-'a']=temp;
q=q->next[*s-'a'];
}
else
{
q=q->next[*s-'a'];
q->f++;
}
s++;
}
}
int query(Tree *root,char *s)
{
Tree *q=root;
while(*s!='\0'&&q!=NULL)
{
q=q->next[*s-'a'];
s++;
}
if(q==NULL) return 0;
return q->f;
}
void del(Tree *root)
{
for(int i=0;i<N;i++)
if(root->next[i]!=NULL)
del(root->next[i]);
delete(root);
}
int main()
{
char s[10];
Tree *root=new Tree;
for(int i=0;i<N;i++) root->next[i]=NULL;
while(gets(s)&&s[0])
{
insert(root,s);
}
while(gets(s))
{
printf("%d\n",query(root,s));
}
del(root);
return 0;
}
结束记得释放内存!虽然还有点没搞清~
HDU-1251 统计难题,字典树或者map!的更多相关文章
- hdu 1251 统计难题 (字典树入门题)
/******************************************************* 题目: 统计难题 (hdu 1251) 链接: http://acm.hdu.edu. ...
- HDOJ/HDU 1251 统计难题(字典树啥的~Map水过)
Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己 ...
- hdu 1251 统计难题 字典树第一题。
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- hdu 1251 统计难题(字典树)
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others) Total Subm ...
- HDU 1251 统计难题 字典树大水题
今天刚看的字典树, 就RE了一发, 字典树原理还是很简单的, 唯一的问题就是不知道一维够不够用, 就开的贼大, 这真的是容易MLE的东西啊, 赶紧去学优化吧. HDU-1251 统计难题 这道题唯一的 ...
- hdu 1251 统计难题 (字典树(Trie)<PS:C++提交不得爆内存>)
统计难题Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submis ...
- HDU 1251 统计难题(字典树)
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- HDU 1251统计难题 字典树
字典树的应用. 数据结构第一次课的作业竟然就需要用到树了!!!这不科学啊.赶紧来熟悉一下字典树. 空间开销太大T T #include<cstdio> #include<cstrin ...
- hdu -1251 统计难题(字典树水题)
http://acm.hdu.edu.cn/showproblem.php?pid=1251 建树之后 查询即可. G++提交 ME不知道为什么,c++就对了. #include <iostre ...
随机推荐
- PostgresSQL 数组包含@>
原文链接:http://www.postgresql.org/docs/9.5/static/functions-array.html 9.18. Array Functions and Operat ...
- Java删除List指定元素
List<String> lists = new ArrayList<>(); list.add("123"); list.add("456&qu ...
- python经典一百道习题(转自奶酪博客)
无论学习哪门计算机语言,只要把100例中绝大部分题目都做一遍,就基本掌握该语言的语法了. [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? #Filena ...
- ReactiveCocoa 响应式函数编程
简介 ReactiveCocoa(简称为RAC),RAC具有函数响应式编程特性,由Matt Diephouse开源的一个应用于iOS和OS X的新框架. 为什么使用RAC? 因为RAC具有高聚合低耦合 ...
- iOS Block的本质(四)
iOS Block的本质(四) 上一篇文章iOS Block的本质(三)中已经介绍过block变量的捕获,本文继续探寻block的本质. 1. block内修改变量的值 int main(int ar ...
- NumPy库的基本使用
一.介绍 ——NumPy库是高性能科学计算和数据分析的基础包,它是Pandas及其它各种工具的基础 ——NumPy里的ndarry多维数组对象,与列表的区别是: - 数组对象内的元素类型必须一样 - ...
- Codeforces Round #317 (Div. 2) C Lengthening Sticks (组合,数学)
一个合法的三角形的充要条件是a<b+c,其中a为最长的一边,可以考虑找出所有不满足的情况然后用总方案减去不合法的情况. 对于一个给定的总长度tl(一定要分完,因为是枚举tl,不分配的长度已经考虑 ...
- HDOJ1195 双向BFS //单向也可以过 没想清
#include<cstdio> #include<map> #include<vector> #include<stack> #include< ...
- 基本编程题 --python
1.让Python帮你随机选一个饮品吧! import random listC = ['加多宝', '雪碧', '可乐', '勇闯天涯', '椰子汁'] print(random.choices(l ...
- CentOS 6.7安装(一)
CentOS 6.7安装 1.将光盘放入服务器,选择从光盘启动,选择“Install or upgrade an existing system”,并跳过光盘测试. 2.选择安装过程中使用的语言,默认 ...