数据结构
文章平均质量分 85
fcbruce
Veni,Vidi,Vici
展开
-
HDU 2825 Wireless Password (AC自动机,DP)
题意:给出m个模式串,要求构造一长度为n的文本串,至少包括k种模式串,求有多少种可能的模式串。分析:m个模式串构建AC自动机,然后要在这AC自动机中走n步,至少经过k个单词结点。因为m<=10,显然可以用状压表示已经有哪几个单词结点。用dp[i][j][k]表示走了i步到AC自动机中的第j个结点,单词状态为k,由计数原理可推出状态转移方程:dp[i][j][k]=sum(dp[i-1][last_j][last_k]),last_j表示可以抵达第j个结点的上一个结点,last_k表示上一步的状态;因为原创 2014-11-20 11:19:33 · 1646 阅读 · 0 评论 -
HDU 4027 Can you answer these queries? (线段树)
题意:给出一排敌军的血量,每次攻击都能将范围内的敌军血量变为原来血量的算术平方根(下取整),并询问范围内敌军的血量和。分析:显然的线段树,但是似乎不太好设计lazy标记啊,我们想一想算术平方根,sqrt(1)=1,且64位整数范围内最多6次就变到1了,那么只要区间内的数都为1,我就不用更新这个区间了,所以每次更新都更新到叶子结点,维护区间和就行了。数据里没有0,不过X>Y这种trick有意思吗?原创 2014-08-27 19:26:16 · 1553 阅读 · 1 评论 -
HDU 3255 Farming(线段树求体积并)
你家种一年地的收成暴int!你当是《日人民报》啊!题意:雇佣贫农种地(所以是地主喽),每个农民带一种种子,播种在他管理矩形区域,每个单位面积种一粒,区域可能会重合,那么收成高的那粒会将其他的覆盖掉,求最终收成。分析:一开始想的是二维线段树set,但是看到面积有sqr(10^6),即使离散化也有sqr(3*10^4),后来想到加权的线段树扫描线求面积并,但是发现覆盖种子不好维护,后来看到别人题解标题:线段树求体积并。把价格看成高度,那么每粒种子的高度区间就可以看成[0,price),想像一下,这些"原创 2014-08-27 16:09:56 · 1347 阅读 · 1 评论 -
HDU 4819 Mosaic(二维线段树)
题意:给出一个图片,分成N×N个单元格,有M次操作,每次操作将(x,y)的值变为以(x,y) 为中心L(L为奇数)为边长的区域内的最小值和最大值的均值(floor((maximum+minimum)/2)),并输出该值。分析:明显的二维线段树的单点更新和区间查询,维护最值。更新肯定是先在二维内找到叶子节点的那棵线段树,然后再在这棵树上更新,这部分很简单,就想成一维的写。但是这毕竟是二维线段树,二维的部分也需要维护,当然这部分比较麻烦,我们先想一想一维的:一维的节点维护的是值,我们只要根据它的左右儿子原创 2014-08-15 10:39:09 · 1490 阅读 · 0 评论 -
POJ 2482 Stars in Your Window(线段树扫描线)
题意:背景真是令人感动,我都看得哭了......前面的自己看吧。给出星星的坐标和亮度,给定一个矩形(长/宽),求框住的星星亮度和的最大值,恰好在边上的不算。分析:一个月前在上海邀请赛就有这样的题,当时我线段树只会成段更新,所以那道题目也没碰...我们这样想,每个星星能影响的范围就是给定矩形的面积,为方便起见,不妨设星星的位置为矩形的左下角。那么在这个范围内的点全部加上它的亮度,最终我们就是求该平面内的最大值。这样的话就要用到二维线段树...可是有10k颗星星...这要开多大的数组啊.....原创 2014-08-22 18:57:00 · 2513 阅读 · 0 评论 -
HDU 5033 Building (单调栈)
题意:给出N幢摩天大楼的位置和高度,有Q次查询,问在某点处能看见天空的角度范围。分析:一开始的想法是维护一个单调栈,首先离线数据并排序,然后左右扫两边。单调栈内大楼的高度要递减,然后判断栈顶元素是否比它的前一个更优,如果不是则出栈。但是如果栈顶元素比它前一个优,并不能保证是全局最优的。正确的维护方法是保证单调栈内的大楼高度递减,而且要使得这些大楼的最高点构成一个类似凸包的形状,或者说是凸包的一部分,然后再判断栈顶元素和它前一个比是否更优,如果不是则出栈。这样最后的栈顶元素就是待查询点在某方向的视角最原创 2014-09-21 21:32:37 · 1485 阅读 · 1 评论 -
HDU 4973 A simple simulation problem.(线段树)
题意:初始给出1-n的序列,有两个操作:D l r,将[l,r]区间的每个数都复制一个;Q l r,询问[l,r]区间内最多的相同数字的个数。分析:显然的线段树,但是这个序列的长度会因为D操作变化,即线段长度变化。通过观察发现这个序列永远是sort过的,那么我们只要维护每个数的数量,操作前找到l和r的位置,然后再单点更新、成段更新,成段询问,线段树的综合应用。原创 2014-08-24 11:52:07 · 1339 阅读 · 0 评论 -
ZOJ 1859 Matrix Searching(二维线段树)
题意:给出一个n*n的矩阵,有m次询问,求每次询问子矩阵中的最小值。分析:显然二维线段树随便乱搞搞就行了,线段树维护区域内的最小值。注意二维上的"pushup()"的写法,实际上也是要维护一棵线段树。原创 2014-08-24 13:29:00 · 1183 阅读 · 1 评论 -
POJ 3074 Sudoku(数据结构,DLX)
http://poj.org/problem?id=3074原创 2014-06-27 14:52:04 · 1216 阅读 · 1 评论 -
DLX模板
《算法竞赛入门经典——训练指南》P406有原创 2014-06-27 14:19:44 · 1083 阅读 · 0 评论 -
HDU 4419 Colourful Rectangle (线段树扫描线)
题意:给出R,G,B三种颜色的矩形的数据,求最后7种颜色(R,G,B,RG,RB,GB,RGB)的面积是多少?分析:显然的线段树扫描线,可以说这题非常考验对线段树扫描线的理解,如果只会用模板,恐怕很难做出来。R,G,B三种颜色最后会产生7种颜色(无色不算),可以预见本题对编码质量要求相当之高。update()操作和一般的线段树扫描线并无太大的不同,本题的精髓在于query()!一般的简单扫描线甚至不用写query,因为根结点维护的区间覆盖长度就是我们所需要的。但是本题需要从复杂的信息中分出7种信原创 2014-09-24 02:03:27 · 1943 阅读 · 1 评论 -
POJ 4002 Alice's mooncake shop(DP,单调队列)
http://poj.org/problem?id=4002原创 2014-06-29 03:32:58 · 1191 阅读 · 1 评论 -
POJ 1625 Censored!(AC自动机,DP)
题意:给出一n种字符的字典,有k个禁用的单词,问能组成多少个不同的长度为m的合法字符串。分析:构建出AC自动机后在里面走m步有不经过单词结点有多少种方案,用dp[i][j]表示走了i步到第j个结点的方案数,根据计数原理可得状态转移方程:dp[i][j]=sum(dp[i][last_j]),其中last_j表示能走到j结点的前趋们,j不为单词结点。要注意此题要用到高精度,而且要用unsigned char存储。原创 2014-11-20 15:19:12 · 1544 阅读 · 1 评论 -
POJ 3691 & HDU 2457 DNA repair (AC自动机,DP)
题意:给出N个模式串和一个文本串,问最少修改文本串中多少个字母使得文本串中不包含模式串。分析:N个模式串构建AC自动机,然后文本串在AC自动机中走,其中单词结点不可达。用dp[i][j]表示文本串第i个字母转移到AC自动机第j个结点最少修改字母的个数,状态转移方程为dp[i][j]=min(dp[i][j],dp[i-1][last]+add),last表示j的前趋,add为当前点是否修改。由于第i个只和第i-1个有关,所以可以使用滚动数组来优化空间。原创 2014-11-18 12:14:07 · 1501 阅读 · 0 评论 -
UVA 10679 I love Strings!!!(AC自动机)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1620题意:给出一个文本串和若干个模式串,问模式串是否在文本串中出现过。分析:简单粗暴的AC自动机模板题,要注意模式串可能有重复的情况。/* * * Aut原创 2014-10-04 18:54:18 · 1529 阅读 · 0 评论 -
UVA 11488 Hyper Prefix Sets (Trie)
题意:给出N个字符串,要求选出若干个,使得选中的字符串的公共前缀长度与选中字符串的个数的乘积最大。分析:简单粗暴的Trie模板题。对于Tire中的每一个结点添加两个信息:该结点的深度及该结点杯访问的次数,最后求出这两个信息的最大值就行了,边加入字符串边维护就行。原创 2014-10-04 21:44:59 · 1161 阅读 · 0 评论 -
Trie树模板
Trie树,包括插入查找原创 2014-10-04 14:19:47 · 1340 阅读 · 0 评论 -
SPOJ 11840. Sum of Squares with Segment Tree (线段树,区间更新)
题意:有三种操作:将区间中的所有数置为x;将区间中的所有数加上x;求区间内所有数的平方和。分析:先考虑如果不需要求平方和,只是求和,我们需要维护这些数据:addv-区间内的数共同加上的值;setv-区间内的数都置为的值(setv=INF表示不设置);sumv-区间内的数加上addv之前的值。但这题求的是平方和,似乎不是很好维护。如果只是set操作,还是很好维护的,那么难点就在于add操作了。考虑如下等式:(x+v)^2=x^2+2xv+v^2,x是add操作之前的数,v是add的数,这是一个数的情况原创 2014-10-03 17:14:15 · 2043 阅读 · 0 评论 -
HDU 4057 Rescue the Rabbit (AC自动机+DP)
http://acm.hdu.edu.cn/showproblem.php?pid=4057Rescue the RabbitTime Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1482 Accepted Submis原创 2014-11-14 22:01:58 · 1368 阅读 · 0 评论 -
AC自动机模板
AC自动机,继承自Trie原创 2014-10-04 18:45:50 · 676 阅读 · 0 评论 -
HDU 2870 Largest Submatrix (单调栈)
http://acm.hdu.edu.cn/showproblem.php?pid=2870Largest SubmatrixTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1569 Accepted Submissi原创 2014-10-26 00:47:32 · 1383 阅读 · 0 评论 -
POJ 2886 Who Gets the Most Candies? (线段树,单点更新)
http://poj.org/problem?id=2886原创 2014-07-09 20:40:46 · 664 阅读 · 0 评论 -
POJ 2155 Matrix (二维线段树)
http://poj.org/problem?id=2155MatrixTime Limit: 3000MS Memory Limit: 65536KTotal Submissions: 18143 Accepted: 6813DescriptionGiven an N*N matrix A,原创 2014-08-04 10:43:11 · 1233 阅读 · 0 评论 -
UVA 548 Tree(数据结构,二叉树,遍历)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=104&page=show_problem&problem=489 Tree You are to determine the value of the leaf node in a g原创 2014-05-11 01:45:57 · 816 阅读 · 0 评论 -
UVA 11234 Expressions(数据结构,二叉树,栈,队列)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=103&page=show_problem&problem=2175原创 2014-05-09 20:09:30 · 1179 阅读 · 0 评论 -
UVA 112 & POJ 1145 Tree Summing(数据结构,二叉树,栈)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=104&page=show_problem&problem=48http://poj.org/problem?id=1145原创 2014-05-10 22:29:32 · 1306 阅读 · 1 评论 -
POJ 1182 食物链(种类并查集)
http://poj.org/problem?id=1182食物链Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 40479 Accepted: 11768Description动物王国中有三类动物A,B,C,这三类动物原创 2014-03-26 18:10:51 · 886 阅读 · 0 评论 -
HDU 1829 A Bug's Life(种类并查集)
http://acm.hdu.edu.cn/showproblem.php?pid=1829A Bug's LifeTime Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7294 Accepted Submission原创 2014-03-25 22:15:17 · 1093 阅读 · 0 评论 -
HDU 1237 简单计算器(数据结构)
http://acm.hdu.edu.cn/showproblem.php?pid=1237原创 2014-04-06 20:42:23 · 989 阅读 · 0 评论 -
HDU 2818 Building Block(并查集)
http://acm.hdu.edu.cn/showproblem.php?pid=2818Building BlockTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2538 Accepted Submissi原创 2014-03-25 17:30:24 · 783 阅读 · 0 评论 -
HDU 1198 Farm Irrigation(并查集)
http://acm.hdu.edu.cn/showproblem.php?pid=1198原创 2014-04-05 16:43:11 · 814 阅读 · 0 评论 -
HDU 1754 I Hate It (线段树)
http://acm.hdu.edu.cn/showproblem.php?pid=1754I Hate ItTime Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 31500 Accepted Submissio原创 2014-02-28 23:01:12 · 816 阅读 · 1 评论 -
UVA 297 Quadtrees( 数据结构,树)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=104&page=show_problem&problem=233原创 2014-05-11 03:13:31 · 727 阅读 · 0 评论 -
HDU 3972 1 M possible (hash)
http://acm.hdu.edu.cn/showproblem.php?pid=39721 M possibleTime Limit: 15000/5000 MS (Java/Others) Memory Limit: 2048/1024 K (Java/Others)Total Submission(s): 950 Accepted Submissio原创 2014-04-28 20:59:49 · 983 阅读 · 0 评论 -
HDU 1542 Atlantis(线段树扫描线)
http://acm.hdu.edu.cn/showproblem.php?pid=1542AtlantisTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6788 Accepted Submission(s):原创 2014-08-03 14:53:02 · 1207 阅读 · 0 评论 -
POJ 2828 Buy Tickets (线段树,单点更新)
http://poj.org/problem?id=2828原创 2014-07-09 20:13:24 · 685 阅读 · 0 评论 -
POJ 3225 Help with Intervals (线段树,区间更新)
http://poj.org/problem?id=3225Help with IntervalsTime Limit: 6000MS Memory Limit: 131072KTotal Submissions: 9859 Accepted: 2344Case Time Limit: 2000MS原创 2014-07-09 21:05:29 · 822 阅读 · 0 评论 -
HDU 4286 Data Handler( 数据结构,双向队列,模拟)
http://acm.hdu.edu.cn/showproblem.php?pid=4286Data HandlerTime Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2218 Accepted Submissio原创 2014-06-17 21:07:43 · 1071 阅读 · 0 评论 -
HDU 2871 Memory Control (线段树,区间合并)
http://acm.hdu.edu.cn/showproblem.php?pid=2871Memory ControlTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4418 Accepted Submissio原创 2014-07-22 08:21:07 · 1311 阅读 · 0 评论 -
HDU 4417 Super Mario(离线线段树)
http://acm.hdu.edu.cn/showproblem.php?pid=4417http://acm.hdu.edu.cn/showproblem.php?pid=4417原创 2014-07-01 22:06:03 · 741 阅读 · 0 评论