ACM-数据结构
文章平均质量分 81
w20810
这个作者很懒,什么都没留下…
展开
-
zoj 3494 BCD Code (ac自动机+数位dp)
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4317题意:给定N个01串,再给定区间[a,b],问区间[a,b]里面有多少个数转化成BCD码之后不包含任何前面给出01串。分析:首先将01串建ac自动机,然后把不可到达的点标记出来。用二维数组Matrix[][]把状态转移图(比如Matirx[cur][x原创 2015-09-05 11:16:42 · 932 阅读 · 0 评论 -
hdu 5442 Favorite Donut(后缀数组)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5442题意:给定长度为n的字符串s(s是环),然后以某一点顺时针或者逆时针出发遍历字符串s将得到一个t,求一个字典序最大的字符串t的起始位置。字典序相同的选起始位置靠前的,位置相同的选顺时针的。分析:将原来的字符串添加字符,使得前n个字符,每个字符与其后面的n-1个字符正是循环遍历的字符串。比如aa原创 2015-09-16 10:44:37 · 509 阅读 · 0 评论 -
codeforces #307 E. GukiZ and GukiZiana (分块)
题目:http://codeforces.com/problemset/problem/551/E题意:给定n个元素的数组,然后有两种操作:1、1 l r x 操作类型为1,将[l,r]的所有元素+x 。2、2 x 查询整个区间的最左和最右边的x的距离d1和d2,求d2-d1,不存在x输出-1。分析:第一次写分块。。。思路很简单,就是将整个数组分成很多块。在cf上看到一份十分简洁的ac代码原创 2015-10-20 13:46:09 · 539 阅读 · 0 评论 -
codeforces #329 D. Happy Tree Party (LCA+并查集 || 树链剖分)
题目:http://codeforces.com/contest/593/problem/D题意:给定一棵n个节点的树。有两种操作:①给定 u v p, 求p除u--->v这条链上所有的边权的值(每次上下取整)②修改某一条边的边权。分析:解法一:由于p具体做法:u-->lca (deep(u)>deep(lca)), v-->lca (deep(v)>deep(lca))代码:原创 2015-11-08 11:15:23 · 493 阅读 · 0 评论 -
codeforces #316 D.Tree Requests (巧妙的dfs序)
题目:http://codeforces.com/contest/570/problem/D题意:给定一棵n个节点的树,每个节点有一个字符。现在有q次查询,每次查询给出两个整数v、h,问节点v的深度为h的孩子节点所表示的字符能否构成回文串。分析:假如我们对每个节点以dfs序重新编号,那么节点u的所有孩子节点的编号是连续的,并且我们知道开始的位置和末位置。现在要找深度为h的孩子节点,我们只需原创 2015-10-25 12:44:01 · 509 阅读 · 0 评论 -
codeforces 321# E. Kefa and Watch (线段树+字符串hash)
题目:http://codeforces.com/contest/580/problem/E题意:给定长度为n的字符串,然后有修改和查询操作。修改:将区间[l,r]的字符改为c。查询:查询区间[l,r]的子串的周期是否d。分析:Obviously, the substring from l to r have a d-period, if a substring from l + d原创 2015-09-24 16:33:25 · 662 阅读 · 0 评论 -
cf div2 #333 D. Lipshitz Sequence (单调栈)
题目:http://codeforces.com/contest/602/problem/D题意:给定n(n)个整数的数组h[i],现在定义一个函数For an array , we define it's Lipschitz constant as follows:if n , if n ≥ 2, over all 1 ≤ i j ≤ n然后有原创 2015-11-27 21:44:02 · 593 阅读 · 0 评论 -
hdu1890 Robotic Sort(Splay)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1890题意:将给定的数组排序,你可以用的操作是反转一段区间。输出你的操作。Robotic SortTime Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm原创 2016-01-17 23:18:37 · 540 阅读 · 0 评论 -
LA5031 Graph and Queries (Treap模版)
题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20332题意:给定无向图,有三种操作,①删除第i条边②查询节点x所在的连通分量节点中第K大的权值③改变节点x的权值。现在问你最终的查询结果的平均值。分析:查询第k大的值,用线段树可以,但是这里显然有很多连通分量,用线段树的话内存不够。这题是lrj白书上面的一题。由原创 2015-12-31 20:57:07 · 598 阅读 · 0 评论 -
hdu 4691 Front compression (基于hash的LCP)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4691题意:分析:直接求LCP啊。。。代码:#include #include #include #include using namespace std;typedef unsigned long long ULL;const int maxn = 1e5+6;const i原创 2015-09-14 13:32:04 · 468 阅读 · 0 评论 -
hdu 4552 怪盗基德的挑战书 (基于hash的LCP)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4552题意:分析:若某一后缀S与文本串T的LCP等于x,那么此后缀对答案的贡献为x,枚举后缀即可。代码:#include #include #include using namespace std;typedef unsigned long long ULL;const int m原创 2015-09-14 13:27:38 · 584 阅读 · 0 评论 -
BNUOJ 34990 Justice String (基于hash的LCP)
题目:http://www.bnuoj.com/v3/problem_show.php?pid=34990题意:给定字符串A和B,在A里面找一个子串s,在s里面最多修改2个字符后使得s和B相同。求s的起始位置。分析:枚举起点求s和B的LCP。看s最多修改两次后是否满足条件。代码:#include #include #include #include using na原创 2015-09-14 13:40:29 · 727 阅读 · 0 评论 -
hdu 5384 Danganronpa (ac自动机)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5384题意:很直接的多模式匹配,不过这里的文本串有多个。分析:建ac机的时候,把到达每个节点的贡献算出来,这样匹配的时候就不用在ac机上回溯了。时间复杂度O(|A|+|B|)。代码:#include #include #include #include #include u原创 2015-09-07 12:57:09 · 454 阅读 · 0 评论 -
hdu 5416 CRB and Tree (DFS)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5416题意:定给一棵树,有N-1条边,每条边有一个权值,查询两个点u到v的异或和为s的路的条数(u可以等于v)。分析:预处理出所有的顶点到root的异或和,然后对于每次查询枚举起点就行了。代码:#include #include #include #include using nam原创 2015-08-21 14:03:41 · 579 阅读 · 0 评论 -
hdu 2825 Wireless Password (ac自动机+状态压缩dp)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2825题意:给定m个模式串,问有多少个长为n的文本串至少包含K种模式串。分析:首先将模式串建ac自动机,然后在求fail指针的时候把到达某个节点需要加的贡献求出来(由于最多只有10种模式串,可以将模式串种数压缩到一个int型)。然后记忆化搜索,dp[len][cur][num],len代表当原创 2015-09-07 12:45:42 · 414 阅读 · 0 评论 -
poj 2778 DNA Sequence (ac自动机+矩阵快速幂优化dp)
题目:http://poj.org/problem?id=2778题意:给出N段DNA序列(仅由‘A’,'T','G','C'四种字符组成),求一段长为L的DNA序列不包含前面给出的任何DNA序列的方案数。分析:将N个字符串建成ac自动机,然后把所有禁止走的位置标记出来,然后利用ac自动机建二维矩阵Matrix[][],Matrix[u][v]表示节点u走一步到节点v的路径数。然后原创 2015-09-06 12:15:46 · 511 阅读 · 0 评论 -
hdu 2457 DNA repair (ac自动机+记忆化搜索)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2457题意:给出N个DNA序列(只包含’A‘,'T','G','C'四种字符),然给一段DNA序列S,问最少改多少个字符使得这个DNA序列不包含前面任意一个DNA序列。分析:将前面N个DNA序列建ac自动机,然后找出禁止走的位置。定义dp[i][j],i表示当前在字符串S的位置,j表示对应在原创 2015-09-06 13:06:06 · 483 阅读 · 0 评论 -
CSUOJ 1329 一行盒子(数组模拟链表)
题目:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1329题意:分析:数组模拟指针,每个节点有两个指针(前驱和后继),每个操作只需改变相关前驱指针和后继指针的值。代码:#include #include #include #include using namespace std;const int maxn = 1e原创 2015-08-23 12:36:52 · 800 阅读 · 0 评论 -
uva 11732 "strcmp()" Anyone? (trie+左儿子右兄弟表示法)
题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28438题意:定义了一个strcmp()函数,如图:然后给出n个字符串s(n分析:可以发现,对于不同的两个字符串比较的次数=最长公共前缀的长度*2+1,对于相同的两个字符串比较的次数=(字符串长度+1)*2。很容易想到用trie,但是最多可能有4000*100原创 2015-08-22 10:00:30 · 869 阅读 · 0 评论 -
uvalive 4513 Stammering Aliens (基于Hash的LCP+二分)
题目:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2514题意:给定一个字符串T,在T里面找出一个子串s使得子串s在T里面至少出现m次。输出最长字符串的长度和起始位置的最大值。(起始位置从0开始 )如果不存在输出“none”。原创 2015-09-14 13:19:25 · 777 阅读 · 0 评论 -
POJ3580 SuperMemo (Splay)
题目:http://poj.org/problem?id=3580题意:SuperMemoTime Limit: 5000MS Memory Limit: 65536KTotal Submissions: 12596 Accepted: 3952Case Time Limit: 2000MS原创 2016-01-19 23:58:21 · 492 阅读 · 0 评论 -
cf #310 E. Case of Chocolate (upper_bound())
题目:http://codeforces.com/contest/556/problem/E题意:一块只有左上角的巧克力,每次从对角线位置向左或者向上吃,并且只能连续地吃。有q吃查询,问每次能吃的长度。E. Case of Chocolatetime limit per test3 secondsmemory limit per te原创 2015-12-19 15:10:22 · 492 阅读 · 0 评论 -
主席树-区间第k大值(不带修改)
题目:poj2104 && hdu2665题意:求区间第K大的值。分析:资料1 主席树包含n棵线段树,这n棵线段树的形状完全相同。而且树与树之间有很大的重叠。线段树root[i]表示数组a中区间[1,i]的元素插进线段树时的版本。那么再添加一个元素a[i+1]时,只需修改线段树上的从根节点开始向下走的一条路径。那么对于线段树root[i+1],我们先“拷贝”线段树root[原创 2016-01-05 12:55:51 · 2034 阅读 · 0 评论 -
STL红黑树
参考博客:STL源码剖析-红黑树原理详解上 STL源码剖析-红黑树原理详解下一、红黑树概述 红黑树和我们以前学过的AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。不过自从红黑树出来后,AVL树就被放到了博物馆里,据说是红黑树有更好的效率,更高的统计性能。这一点在我们了解了红黑树的实现原理后转载 2016-03-05 15:58:55 · 954 阅读 · 0 评论 -
codeforces Round #344 A~E
A. Interview题意:给定n(n分析:暴力枚举区间就行了。代码:#include using namespace std;typedef long long LL;typedef unsigned long long ULL;const LL INF = 1e9+7;const LL MINT = ~0u>>1;#define lson l,m,rt<<1原创 2016-03-19 14:40:00 · 553 阅读 · 0 评论 -
codeforces #336 E. Marbles (字符串hash或者kmp匹配)
题目:http://codeforces.com/contest/608/problem/E题意:有两个通道,在每个通道的起点分别放一个小球,然后问是否存在一系列指令使得两个小球最后都在终点。若小球碰壁,则保持原来的位置不变。分析:看的这篇博客,http://blog.csdn.net/snowy_smile/article/details/50402283Hash代码:#in原创 2016-02-23 20:27:00 · 822 阅读 · 0 评论 -
poj 1151 Atlantis && codeforces #337 D. Vika and Segments (线段树+扫描线)(求面积并)
题目:http://poj.org/problem?id=1151 http://codeforces.com/contest/610/problem/D题意:告诉n个矩形的顶点坐标,求面积并。分析:几篇比较好的介绍线段树扫描线的博客:http://www.cnblogs.com/kane0526/archive/2013/02/26/2934214.htmlhttp://原创 2016-02-26 17:34:09 · 466 阅读 · 0 评论 -
codeforces GoodBye2015 D.New Year and Ancient Prophecy (dp+lcp+树状数组)
题目:http://codeforces.com/contest/611/problem/D题意:D. New Year and Ancient Prophecytime limit per test2.5 secondsmemory limit per test512 megabytesinputstandard input原创 2016-03-12 15:50:29 · 579 阅读 · 0 评论 -
hdu1828 Picture (线段树+扫描线)(求周长并)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1828题意:给定n(nPictureTime Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3826 Accepted Sub原创 2016-02-28 19:45:56 · 506 阅读 · 0 评论 -
codeforces #337 E. Alphabet Permutations (线段树区间合并)
题目:http://codeforces.com/contest/610/problem/E题意:给定一个长度为n(n20000条指令。E. Alphabet Permutationstime limit per test1 secondmemory limit per test512 megabytesinputstandard i原创 2016-02-29 19:42:43 · 759 阅读 · 0 评论 -
codeforces #334 D. Babaei and Birthday Cake (线段树或者dp+二分)
题目:http://codeforces.com/contest/629/problem/D题意:给定一个长度为n(n分析:定义dp[sum]表示和为sum,以dp[sum]结尾的最小体积。(类似最长上升子序列的做法)我们发现sum越小,那么dp[sum]就越小,否则,dp[sum]不够优,就不满足定义。所以dp[sum]数组是具有单调性的。维护dp[sum]数组的话,用一原创 2016-03-24 20:22:40 · 449 阅读 · 0 评论 -
cf #312 E. A Simple Task (线段树+计数排序)
题目:http://codeforces.com/contest/558/problem/E题意:给你一个字符串s,|s|分析:计数排序:先统计区间内每种字符的个数,然后按顺序将字符分配。例如bccasabdassa有3个b有2个c有2个d有1个s有3个按顺序分配之后就是aaabbccdsss,就已经排好序了。现在用线段树的每个节点保存区间内每种原创 2015-12-09 11:02:08 · 458 阅读 · 0 评论 -
hdu3487 Play with Chain (Splay)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3487题意:给定一个长度为n(n分析:Splay~对于操作1,是很直接的伸展树的操作。下面摘自kuangbin的文章:3、伸展树区间操作在实际应用中,伸展树的中序遍历即为我们维护的数列,这就引出一个问题,怎么在伸展树中表示某个区间?比如我们要提取区间[a,b],那么我们将a前原创 2016-01-10 20:04:03 · 419 阅读 · 0 评论 -
poj3468 A Simple Problem with Integers(Splay)
题目:http://poj.org/problem?id=3468题意:区间修改,查询区间的和。分析:线段树+懒惰标记的模版题。。。现在改用Splay来写。前面几个题插入的时候用Insert,就是按值的大小来插入的。现在用元素在数组里面的位置进行插入,就是按位置的大小来插的。一旦插入完成有序性就固定了。因为rotate操作里面并没有用到值的大小。所以,中序遍历出来的原创 2016-01-09 15:42:43 · 373 阅读 · 0 评论 -
hdu4417 Super Mario (主席树+二分)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4417题意:求区间内不大于x的数有多少个。分析:二分枚举答案,用主席树查询即可。复杂度q*log(n)*log(n)。代码:#include #include #include using namespace std;typedef long long LL;typedef un原创 2016-01-05 13:05:20 · 455 阅读 · 0 评论 -
树套树-区间第k大(带修改)
题目:zoj2112题意:求区间第k大的数,有修改操作。分析:这题可以树套树搞。从网上看了很多博客才理解。。。资料1 资料2我看的是树状数组套线段树版的。还有线段树套平衡树版的。首先用一棵主席树(见这篇文章)维护没有操作前的数据。然后用树状数组维护修改。树状数组的每一个节点是一棵线段树,而且树状数组的每个节点都有一个管辖域(树状数组的性质没变)。每更新一次原创 2016-01-05 16:44:54 · 2339 阅读 · 1 评论 -
[NOI2005]维修数列 (Splay)
题目:bzoj1500题意:DescriptionInput输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目。第2行包含N个数字,描述初始时的数列。以下M行,每行一条命令,格式参见问题描述中的表格。任何时刻数列中最多含有500 000个数,数列中任何一个数字均在[-1 000, 1 000]原创 2016-01-24 00:51:13 · 557 阅读 · 0 评论 -
[HNOI2004]宠物收养所 (Splay)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1208题意:1208: [HNOI2004]宠物收养所Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6221 Solved: 2413[Submit][Status][Discuss]Description原创 2016-01-07 13:50:17 · 503 阅读 · 0 评论 -
[NOI2004]郁闷的出纳员 (Splay)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1503题意:1503: [NOI2004]郁闷的出纳员Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 8962 Solved: 3108[Submit][Status][Discuss]Description原创 2016-01-07 20:01:16 · 462 阅读 · 0 评论 -
[HNOI2002]营业额统计 (Splay || Treap)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1588题意:1588: [HNOI2002]营业额统计Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 11846 Solved: 4226[Submit][Status][Discuss]Description原创 2016-01-07 13:43:47 · 417 阅读 · 0 评论