您的位置:首页 > 理论基础 > 数据结构算法

数据结构习题 (整理中)

2016-05-16 12:56 441 查看

字典树:

hdu 1251   统计出以某个字符串为前缀的单词数量

hdu 1800   要求的就是有几个递减的序列,也就是找到最多重复的值。

hdu 1247   

离线处理

这个题很蛋疼,不仅不告诉你字符串的长度,而且ac代码对于ab abab 这种情况的结果竟然是ab

hdu 1671  

顺序插入即可,插入时判断,是否存在其前缀或者插入的号码是否是其它号码的前缀。

hdu 2846 (*)

对于商品名为abcd的商品,拆为abcd,bcd,cd,d,插入字典树。

在每个结点处,记录该有多少商品名包含该字符串。

(根据字典树查询时的限制,只能从root开始 考虑,所以必须拆商品名)

字典树的题目 开数组时要十分小心,有时候题目给的内存限制,还不够极端情况,这个时候尽量开大,有的时候数组开小了,返回的是wa。

树状数组

hdu 2492  (枚举+扫描)

枚举裁判位置,L1[x]*R2[x]+L2[x]*R1[x]即为答案。
维护树状数组从左往右,从右往左扫描两次即可。

hdu 1394  求最小逆序数
先求出初始状态的逆序数
之后维护一个树状数组进行n-1次变换,
每次都可在短时间内更新当前逆序数。(考虑最左数移动到最右边造成的影响)

hdu 2852 KiKi's K-Number (二分+树状数组)

树状数组是升级版的的前缀和sum[],这个题还是利用[x,y]=sum(y)-sum(x-1);

题解

HDU 5372 Segment Game 离散化+树状数组

官方:对于新插入的线段,查询有多少个线段左端点大于等于该线段的左端点。 再查询有多少个线段的右端点大于该线段右端点, 两者之差就是答案。用两个树状数组搞定。时间复杂度nlog

其实也= 查询右端点小于等于该线段右端点数目-左端点小于该线段数目

这个公式成立必须有一个前提:那就是题目中给出条件的放宽版:添加的线段长度是不递减的。

并查集

并查集删点:

就是将已经连上的点孤立,孤立一个点,相当于建立一个新点,原来的点作废,不用真的删除。


hdu2473 Junk-Mail Filter  题解

带权并查集:

注意:数可能是负的,一句话的正确与否取决于前面形成的认知,不能否定认知。

HDU 3038 How Many Answers Are Wrong  题解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: