--------数据结构--------
xmzyt1996
这个作者很懒,什么都没留下…
展开
-
HDU 4417 Super Mario // 线段树
题目描述HDU 4417 Super Mario解题思路题目大意: 查询区间 [l, r] 有多少个数 <= h.之前只接触过一点线段树, 所以还是来一发线段树吧= =|参考代码#include <iostream> #include <cstdio> #include <vector> #include <algorithm>#define MAX_N 100010 #define Lson i原创 2015-08-10 22:40:10 · 347 阅读 · 0 评论 -
POJ 2503 Babelfish // 字符串映射,Trie
题目描述POJ 2503 Babelfish解题思路题目大意: 给一些单词A及其对应的单词B,比如 dog -> ogday, 然后再输入单词B,输出单词A,若输入的B不存在映射,则输出”eh“.用STL的map应该可以水过去,但是还是用Trie实现一下~~参考代码//********************************************** // Author: @xmzyt原创 2015-10-25 23:12:04 · 354 阅读 · 0 评论 -
HDU 1251 统计难题 // Trie入门题
题目描述HDU 1251 统计难题解题思路题目大意: 统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀)。对每个节点维护cnt,记录经过此节点的次数,然后访问前缀所在节点的cnt即可。参考代码#include <stdio.h> #include <string.h> #include <stdlib.h> struct Trie { Trie* next[26]; in原创 2015-10-25 22:20:25 · 358 阅读 · 0 评论 -
HDU 3172 Virtual Friends // 并查集,字典树
题目描述HDU 3172 Virtual Friends解题思路题目大意: 每次输入两个人A、B,代表两人成为朋友,那么两人所在的圈子将合并成一个新的圈子,输出这个新圈子的人数。 用字典树给名字分配编号,然后用并查集维护集合(圈子)关系即可。参考代码//********************************************** // Author: @xmzyt1996 //原创 2015-10-26 23:00:10 · 410 阅读 · 0 评论 -
HDU 1298 T9 // 字典树,枚举,dfs
题目描述HDU 1298 T9解题思路题目大意: 给出一些单词,及其出现的频率。然后再输入九宫格键盘中的数字(2~9),然后每次按下一个键,输出此刻联想到的单词(单词频率大的优先,频率相同的话,字典序小的优先)。 另外 比如 说 “hell 4”, “hello 7”, and “hellfire 3”, 则hell出现的频率不是0, 而是4+7+3 = 14!!参考代码//**********原创 2015-10-26 23:56:34 · 467 阅读 · 0 评论 -
POJ 1204 Word Puzzles // 字典树,枚举, 搜索
题目描述POJ 1204 Word Puzzles解题思路题目大意: 给出一个Word Puzzles,然后询问每个单词在其中出现的坐标(i, j, dir) i 为单词首字母的横坐标 ,j为纵坐标,dir为八方向之一(用A~H表示)这题我一开始是将Word Puzzles所有可能的单词建Trie,然后每个单词维护(i,j,dir)的信息,这样的话时间和空间的消耗都特别巨大,因此应该换一个思路。原创 2015-10-26 23:26:34 · 472 阅读 · 0 评论 -
POJ 1056 IMMEDIATE DECODABILITY // Trie
题目描述POJ 1056 IMMEDIATE DECODABILITY解题思路思路同 POJ 3630 Phone List参考代码//********************************************** // Author: @xmzyt1996 // Date: 2015-10-16 // Name: POJ 1056.cpp //*************原创 2015-10-26 22:27:04 · 308 阅读 · 0 评论 -
POJ 2001 Shortest Prefixes // Trie
题目描述POJ 2001 Shortest Prefixes解题思路题目大意: 给出每个字符串的最短前缀表示,且不与其他字符串的表示相冲突。Trie中依次访问字符串的每个字符,若当前 字符节点 只被一个字符串所到达,则最短前缀即为从根节点到当前节点所构成的字符串。参考代码//********************************************** // Author: @xm原创 2015-10-26 23:09:37 · 347 阅读 · 0 评论 -
Trie字典树总结
(一)字典树概念字典树——又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。 它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。 有三种基本的性质: 1) 根节点不包含字符,除根节点外每一个节点都只包含一个字符; 2)原创 2015-10-25 22:13:39 · 377 阅读 · 0 评论 -
POJ 3630 Phone List // Trie
题目描述POJ 3630 Phone List解题思路题目大意: 给一些电话号码,只要存在其中一个号码是另一个号码的前缀,输出“NO”,否则输出“YES”。将n个号码插入字典树中,对每个节点维护有多少个号码经过此节点,然后再遍历n个号码,判断前缀是否唯一。参考代码#include <stdio.h> #include <string.h> #include <stdlib.h> struct Tr原创 2015-10-25 23:00:48 · 393 阅读 · 0 评论 -
HDU 1075 What Are You Talking About // 字符串映射,Trie
题目描述HDU 1075 What Are You Talking About解题思路题目大意: 给一些单词及其翻译,然后再输入一个句子,对其进行翻译,若句子中的某个单词不存在翻译,则原样输出,其中标点符号也是原样输出。建Trie树跑一遍,然后需要注意的是:【句子中某个单词A 是以 字典中某个单词B的前缀出现,但是字典里却没有单词A】这种情况.比如说: STRAT earth fnnvk E原创 2015-10-25 23:33:08 · 416 阅读 · 0 评论 -
HDU 1247 Hat’s Words // Trie, 枚举
题目描述HDU 1247 Hat’s Words解题思路题目大意: 判断一个单词是否能由字典中其它两个单词组合而成。 枚举每个单词所有的组合,然后查找分解出来的两个单词是否都存在于字典中即可。参考代码//********************************************** // Author: @xmzyt1996 // Date: 2015-10-15 //原创 2015-10-25 23:42:48 · 347 阅读 · 0 评论 -
HDU 4122 Alice's mooncake shop // RMQ 线段树
题目描述HDU 4122 Alice’s mooncake shop解题思路题目大意: 有一家24小时营业的月饼店, 会连续营业m个小时, 且月饼每个小时的单价会浮动.在第i个小时会有一份订单.订单可以现做,也可以提前做好保存在冰箱里,(放在冰箱里每小时会花费一定的费用,且月饼有保质期为T).问在满足所有订单的前提下,最少的制作费用是多少?抽象出来就是,对于第i个小时的订单. 查询区间 [i-T,原创 2015-08-19 23:24:43 · 419 阅读 · 0 评论 -
HDU 1166 敌兵布阵 // 线段树
题目描述HDU 1166 敌兵布阵解题思路线段树的入门基础题. 题目要求支持下列操作: 1) 区间查询 (求和) 2) 单点更新 (加\减) // 具体还是看注释哈~^ ^参考代码#include <stdio.h> #define lson rt<<1 // 左儿子的下标 #define rson rt<<1|1 // 右儿子的下标 #define mid ((l + r) >>原创 2015-08-16 15:34:58 · 396 阅读 · 0 评论 -
HDU 4286 Data Handler // 模拟链表
题目描述HDU 4286 Data Handler解题思路有一段区间和 两个指针(L 和 R) 要求支持下列操作: 1) 指针左移 2) 指针右移 3) 在指针所指位置插入一个数 4) 删除指针所指位置上的数 5) 反转 指针L 和 R 形成的区间可以将区间分成三段( [0, L) [L, R] (R, n] )考虑, 对每个区间用一个双端队列来维护. 对于反转操作,如果每次真的去反转原创 2015-08-16 17:34:34 · 362 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number // 线段树求逆序数
题目描述HDU 1394 Minimum Inversion Number解题思路题目大意: 给出0~n-1的一个排列,每次可以把前m个数放在后面,eg: a1{a}_{1}, a2{a}_{2}, …, an−1{a}_{n-1}, an{a}_{n} (m=0)(m = 0 ) a2{a}_{2}, a3{a}_{3}, …, an{a}_{n}, a1{a}_{1}原创 2015-08-16 18:06:46 · 353 阅读 · 0 评论 -
HDU 1754 I Hate It // 线段树
题目描述HDU 1754 I Hate It解题思路支持两种操作: 1) 区间最值查询 2) 单点更新 这题跟 HDU 1166 敌兵布阵 是类似的思路.参考代码#include <stdio.h> #define lson rt<<1 #define rson rt<<1|1 #define mid ((l+r) >> 1) inline int max(int a, int b){retu原创 2015-08-16 16:19:35 · 393 阅读 · 0 评论 -
HDU 2795 Billboard // 线段树 单点更新
题目描述HDU 2795 Billboard解题思路题目大意: 有一张h×w的矩形告示栏, 和 n 张 1×wi 的海报 海报每次张贴的位置为告示栏剩余位置的左上角. 要求支持下列操作: 1) 对于每张海报 输出其在告示栏的第几行 (若放不下, 则输出 -1)首先我们知道的是 告示栏上的海报最多只有n张, 即告示栏的行数最多只有n行有效 所以当输入的h大于n时, 令h = n 即可.原创 2015-08-16 22:11:16 · 311 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers // 线段树 区间更新
题目描述POJ 3468 A Simple Problem with Integers解题思路题目大意: 对给定的一段区间支持下列操作: 1) 对区间[l, r] 的所有数, 增加(或减少)某个值 2) 查询区间[l, r] 的和 线段树成段更新的类型题, 具体看注释~^ ^参考代码#include <stdio.h> #define lson rt<<1 #define rson rt<<原创 2015-08-16 22:51:18 · 340 阅读 · 0 评论 -
HDU 1698 Just a Hook // 线段树 区间更新
题目描述HDU 1698 Just a Hook解题思路题目大意: 每段区间有三类状态: 值为1, 2, 3 要求支持下列操作: 1) 修改区间的状态, 然后输出整个区间[1, n]的和 线段树成段更新的入门题, 具体看注释哈~参考代码#include <stdio.h> #define lson rt<<1 #define rson rt<<1|1 #define mid ((l+r) >原创 2015-08-16 22:32:59 · 340 阅读 · 0 评论 -
POJ 2528 Mayor's posters // 线段树 区间更新 离散化
题目描述POJ 2528 Mayor’s posters解题思路题目大意: 在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报?首先数据量较大,应该进行离散化,然后进行线段树的区间更新和查询. 但这题的难点在于每个数字其实表示的是一个单位长度(并非一个点),这样普通的离散化会造成许多错误 给出下面两个简单的例子应该能体现普通离散化的缺陷: eg1: [1, 10] [1, 5] [原创 2015-08-17 22:26:19 · 347 阅读 · 0 评论 -
UVALive 6838 Flipping Parentheses // 线段树 区间修改 最值查询
题目描述UVALive 6838 Flipping Parentheses解题思路题目大意: 给一个已经匹配好的 ‘(’ , ‘)’ 序列,然后每次在 i 处将这个位置的括号反转,问如果要将这个序列重新变成匹配序列,应该反转最左侧的哪个括号?先用一个a[i]数组, 表示的是 在前i个括号,左括号’(‘与右括号’)’的数量之差 index 1 2 3 4 5 6 si{原创 2015-08-17 23:57:56 · 602 阅读 · 0 评论 -
HDU 1800 Flying to the Mars // Trie
题目描述HDU 1800 Flying to the Mars解题思路题目大意: 每个士兵都有各自的能力值,能力强的可以教能力弱的人 “骑扫帚”,两人用的是同一把扫帚 (若A B 用 一把, B C 用一把, 则说明 A B C用同一把)。另外题目要求每个士兵最多只能有一个学生或最多只能有一个老师。最后输出最少需要多少扫帚~不难知道,若n的士兵能力值各不相同的话,则他们只需要一把扫帚。因此,最终扫原创 2015-10-26 23:42:41 · 401 阅读 · 0 评论