单词统计的题目,给出一些单词,统计有多少单词在一个文本中出现,最经典的入门题了。
AC自动机的基础:
1 Trie, 以这个数据结构为基础的,不过增加一个fail指针和构造fail的函数
2 KMP,不是直接运用KMP,而是需要KMP的思想,KMP思想都没有的话,理解这个算法会更加吃力的。
注意本题的单词会有重复出现的,一个单词只能统计一次。
搜索了一下网上的题解,发现好多代码都...
分类:
其他好文 时间:
2014-08-07 13:20:40
阅读次数:
300
给一个n,一个目标串,之后n行每行一个字符串和一个对应的权值。求,在n个给定的串中选出若干个能组成目标串(每个串可以用多次),得到的权值和最大是多少。
(1<=n<=1000) and X (the length of goal is not bigger than 10000),n个串每个长度不超过30...
分类:
其他好文 时间:
2014-08-06 14:54:41
阅读次数:
284
题意:输入 语言A及翻译为语言B的词典,之后再输入语言B的单词,判断是否能从词典中找到,
若能找到,将其翻译为语言A,否则输出“eh”.
思路:这题肯定得先将词典对应语言存起来,但是如果直接暴力找输入的单词是否出现过,必然会TLE
因为单词都是一对一的关系,可以用map实现
当然,trie树是用空间换时间,对于字符串的查找,在时间上有着相当的优势,因此也可以用trie树
注:sscanf函数,从一个字符串中读进与指定格式相符的数据....
分类:
其他好文 时间:
2014-08-05 19:26:00
阅读次数:
232
typedef struct node{ int count; struct node *next[MAX];}Trie;Trie *Newnode()//建立结点&初始化a{ int i; Trie *T; T = (Trie *)malloc(sizeof(Trie...
分类:
其他好文 时间:
2014-08-05 18:12:09
阅读次数:
201
本题乍看像是线段树之类的区间操作,不过因为只是需要查找ip的前缀,故此其实是使用Trie来做。
这里的Trie使用到了Delete函数,这是个Trie函数中最难的函数了,当然要使用数组记录的方法水掉,也是可以的。这里不水,给出delete函数。
考点难点:
1 Trie的操作函数的灵活运用,主要难点是delete函数的灵活运用
2 在叶子节点所有的group id, 删除的时候要注意,不...
分类:
其他好文 时间:
2014-08-05 11:13:09
阅读次数:
296
这题记得以前是我们周赛的题,然后用的是map,也暴过了。
因为这两天要给大一的讲字典树,所以练练几道的代码,以防给大一搞晕了……
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define mem(a,b) memset(a,b,sizeof(a))
#define lson ...
分类:
其他好文 时间:
2014-08-04 21:46:38
阅读次数:
232
基本上是标准的寻找前缀的问题,只需要insert和search函数就可以了。
我这里主要是修改一下n的记录方法,这里的n代表的不是叶子节点的标志,而是有多少单词经过了这条路径的标志。
然后是查找需要查找的前缀单词,如果没有找到,就返回0,表示没有单词以这个前缀单词为前缀,如果找到,直接返回n就是答案了。因为有n个单词经过了这条路径。
查找效率是常数。
使用静态分配空间的办法。
#...
分类:
其他好文 时间:
2014-08-04 21:40:28
阅读次数:
239
Message Flood Time Limit:1500MS Memory Limit:65536KB 64bit IO Format:%lld & %lluDescriptionWell, how do you f...
分类:
其他好文 时间:
2014-08-04 21:01:57
阅读次数:
295
定义:又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,
如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。
核心思想:是空间换时间.利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。
三个基本性质:
1. 根结点不包含字符,除根结点外每一个结点都只包含一个字符。
2. 从根结点到某一结点,路径上经过的字符连接起来,为该结点对应...
分类:
其他好文 时间:
2014-08-04 17:46:47
阅读次数:
231