字典树
芋智波佐助
菜鸟一只
展开
-
URAL 1542. Autocompletion 字典树
给你最多10w个单词和对应的频率 接下来最多1w5千次询问 每次输入一个字符串让你从前面的单词中按照频率从大到小输出最多10个以该字符串为前缀的单词开始把单词建成了字典树 然后每次询问找到所有满足条件的单词 在排序输出 不是超时就是超内存 还来了一发数组越界最后换方法 因为最多只要输出前10个 那么可以把要询问的字符串建字典树 每个结尾节点在做一个映射 存10个单词(当然只是存下标)然原创 2014-10-13 21:09:38 · 1175 阅读 · 0 评论 -
POJ 1451 T9 字典树+优先队列
题目来源:POJ 1451 T9题意:给你一些单词 和优先值 然后当你按下数字的时候首先会出现哪个单词 就是我们平时手机的按键思路:建一颗字典树 因为按一个数字对应多个字母 那么就有多种情况 我们要输出权值最大的一个 我用了优先队列 这里每个前缀的优先值是所有单词优先值的和例如abc 5 abd 6 acd 7 那么a这个前缀的优先值是18 ab的优先值是11#include #原创 2014-07-22 16:58:47 · 1112 阅读 · 0 评论 -
Light OJ 1114 Easily Readable 字典树
题目来源:Light OJ 1114 Easily Readable题意:求一个句子有多少种组成方案 只要满足每个单词的首尾字符一样 中间顺序可以变化思路:每个单词除了首尾 中间的字符排序 然后插入字典树 记录每个单词的数量输入一个句子 每个单词也排序之后查找 根据乘法原理 答案就是每个单词的数量之积#include #include #include #include u原创 2014-06-02 11:42:32 · 1781 阅读 · 0 评论 -
UVa 11488 Hyper Prefix Sets 字典树基础题
题目来源:UVa 11488 Hyper Prefix Sets题意:求公共前缀的长度与有该前缀的字符串的数量的乘积的最大值思路:对于字典树很清楚的可以马上做出来 建树时直接取节点数量和节点深度的乘积的最大值#include #include #include using namespace std;struct node{ int val; node *next[2];原创 2014-04-09 18:52:17 · 1225 阅读 · 0 评论 -
LA 3942 Remember the Word / 前缀树 + DP
前缀树 就是字典树 学了个不是链表的字典树求一个字符串有几种表示方法dp[i+j]=dp[i+j]+dp[i] 递推把 如果制酒遍历4000个子串 会超时 然后用字典树 最多比较100次就行#include #include #include using namespace std;const int maxnode = 4010*100;const int sigma_s原创 2013-11-21 17:09:35 · 1179 阅读 · 0 评论 -
UVa 11732 strcmp() Anyone? 求字符串比较次数
题目来源:UVa 11732 strcmp() Anyone?题意:求若干个字符串两两比较需要的次数 than 和 that 需要比7次 there和the需要7次 就是LCP的长度*2+1 特判2个字符串一样的情况abc和abc需要8次思路:利用字典树 每个点出现分叉的时候说明有些字符串可以比较出来了 总和加上当前深度*和当前节点不一样的兄弟数 链表超时了 学习了左儿子又兄弟表示法原创 2014-04-10 14:02:32 · 1064 阅读 · 0 评论 -
Codeforces 557E Ann and Half-Palindrome DP+字典树
求字典序第K大的半回文串,半回文串满足第一位和最后一位相等,第三位和倒数第三位相等。。。。先用dp求出所有的半回文串,然后插入到字典树中统计个数,根据个数求第K大。#include #include char s[5010];int k;int dp[5010][5010];int ch[5010*5010/2][2];int sum[5010*5010/2];原创 2016-07-07 18:35:35 · 352 阅读 · 0 评论