UVA 1519 - Dictionary Size
题目链接
题意:有一个字典,里面包含一些词,要求组合新词,新词必须来自原字典,或者由原字典的字符串的非空前缀和非空后缀组成,问一共能组成多少个新词
思路:建Trie树,可以求出不同的前缀和后缀个数,然后相乘,这样做会有一部分重复的
比如Aaaa,aaaA的情况,就重复了,去重的方法可以推理出来
假设前缀A后面有x个a,后缀...
分类:
其他好文 时间:
2014-08-19 01:00:53
阅读次数:
207
首先建立Trie和失败指针,然后你会发现对于每个节点 i 匹配AGCT时只有以下几种情况:
i 节点有关于当前字符的儿子节点 j 且安全,则i 到 j找到一条长度为 1的路。
i 节点有关于当前字符的儿子节点 j 且 不安全,则i 到 j没有路。
i 节点没有关于当前字符的儿子节点
但是能通过失败指针找到一个安全的节点j,那么 i 到 j 找到一条长度为1的路。
关于节点安全的定义:
...
分类:
其他好文 时间:
2014-08-17 15:36:52
阅读次数:
361
思路:这题和wikioi 1306一样,也都是求的不同子串的个数,但是wikioi 时间比较长,然后用Trie树就过了。但是我用那个代码提交这题的时候就WA了,比较晕……因为这题有多组样例,所以超了点时间。
所以这题当然就是用后缀数组做的啦!
算法分析:
每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同的前缀的个数。如果所有的后缀按照suffix(sa[1]),suffi...
分类:
其他好文 时间:
2014-08-13 19:09:17
阅读次数:
221
strcmp() Anyone?
题意:输入n个字符串,两两调用一次strcmp(),问字符比较的总次数是多少?
考虑strcmp()的实现如下:
int strcmp (char *s, char * t) {
int i;
for (i = 0; s[i] == t[i]; i++)
if (s[i] == '\0')
return 0;
return s[i] - t[...
分类:
其他好文 时间:
2014-08-13 19:04:07
阅读次数:
129
51CTO学院,在软考备考季特别整理了"2014年软考程序员-常考知识点复习笔记【汇总篇】",帮助各位学院顺利过关!更多软件水平考试辅导及试题,请关注51CTO学院-软考分类吧!查看汇总:2014年软考程序员-常考知识点复习笔记【汇总篇】B树、B-树、B+树、B*树、红黑树和trie树(1)B..
分类:
其他好文 时间:
2014-08-13 15:06:27
阅读次数:
229
简介字符串的处理几乎无处不在,常用的字符串算法有KMP、扩展KMP、Trie树、AC自动机、Manacher、哈希、SA、SAM等。Knuth-Morris-Pratt 算法给你两个字符串AB,询问B串是否是A串的子串(A串是否包含B串)。可以枚举从A串的什么位置起开始与B匹配,然后验证是否匹配。假...
分类:
其他好文 时间:
2014-08-13 12:52:06
阅读次数:
291
Remember the Word
题目:链接
题意:给出一个有S个不同单词组成的字典和一个长字符串。把这个字符串分解成若干个单词的连接(单词可以重复使用),有多少种方法?
思路:令d[i]表示从字符i开始的字符串(后缀s[i..L])的分解数,这d[i] = sum{d(i+len(x)) | 单词x是其前缀}。然后将所有单词建成一个Trie树,就可以将搜索单词的复杂度降低...
分类:
其他好文 时间:
2014-08-12 22:11:14
阅读次数:
291
Trie树模板
#include
using namespace std;
struct Trie
{
int word[100020<<2][26];
int ex[100020<<2];
int sz;
Trie()
{
sz=1;
memset(word,0,sizeof(word));
memset(...
分类:
其他好文 时间:
2014-08-12 17:15:24
阅读次数:
180
字典树 (解析加模版)
分类: ACM2012-07-06
12:24 204人阅读 评论(0) 收藏 举报
字典树:又叫trie树,单词查找树。是一种树形结构,典型的用于统计。经常用于统计一片文章当中出现确定的单词的次数,它的优点就在于:省略了相同前缀的比较。以下图为例:用单词carbohy,carhure,english,englnee来构造的tri...
分类:
其他好文 时间:
2014-08-10 18:49:10
阅读次数:
222