随笔分类 -  数据结构

摘要:题意:给一个N个带权节点的树,权值以给定的K个素数为因子,求路径上节点乘积为立方数的路径条数思路:立方数的性质是每个因子的个数为3的倍数,那么每个因子只需要保存0-2三个状态即可,然后路径就可以转化为一个K位3进制数,点分治后,便可以用一个map来查询路径经过根的答案。代码与上一题(poj1741)... 阅读全文
posted @ 2015-11-12 20:40 jklongint 阅读(352) 评论(0) 推荐(0)
摘要:题意:给一个N个节点的带权树,求长度小于等于K的路径条数思路:选取一个点作为根root,假设f(root)是当前树的答案,那么答案来源于两部分:(1)路径不经过root,那么就是完全在子树内,这部分可以递归统计(2)路径经过root,这部分可以通过容斥原理统计,具体见有关点分治资料。。。点分治有个特... 阅读全文
posted @ 2015-11-12 19:38 jklongint 阅读(513) 评论(0) 推荐(0)
摘要:题意:树的重心定义为树上的一个点把这个点删掉后形成的若干棵子树中节点数的最大值最小。求树的重心和那个最小值思路:考虑dfs,当根从fa转到cur时,那么fa以及fa除cur以外的其它子树变成cur的一个儿子,它的大小为N-sizeof(cur)。其它的递归统计即可。#include #include... 阅读全文
posted @ 2015-11-10 01:59 jklongint 阅读(311) 评论(0) 推荐(0)
摘要:题意:要求在一棵N(#include #include #include using namespace std;#define X first#define Y second#define pb(x) push_back(x)#define mp(x, y) make_pair(x, y)#def... 阅读全文
posted @ 2015-11-09 17:49 jklongint 阅读(317) 评论(0) 推荐(0)
摘要:题意:给n个数字串,求它们的所有不包含前导0的不同子串的值之和思路:把数字串拼接在一起,构造SAM,然后以每个状态的长度len作为特征值从小到大排序,从前往后处理每个状态,相当于按拓扑序在图上合并计算答案。#include using namespace std;#define X first#de... 阅读全文
posted @ 2015-11-06 04:39 jklongint 阅读(370) 评论(0) 推荐(0)
摘要:题意:给出串A和串集合B={B1,B2,...,Bn},求串A的所有不同子串中不是B中任一串的子串的数目。思路:把A和B中所有字符串依次拼接在一起,然后构造后缀自动机,计算每个状态的R集合元素的最大值r,然后统计那些r≤length(A)的状态。hdu不卡时间卡空间,这是最郁闷的。。。导致下面的程序... 阅读全文
posted @ 2015-11-06 04:10 jklongint 阅读(273) 评论(0) 推荐(0)
摘要:Trie树:把若干个单词按前缀合并就得到一棵树,这棵树称为Trie树。Trie树是有根树,每条边表示一个字符,每个节点表示一个从根到当前节点的唯一路径上的字符依次连接得到的字符串。由于空串是任何串的前缀,因此根就表示“空串”这个串。如何区分单词节点和非单词节点呢?插入单词的时候对每个节点mark一下... 阅读全文
posted @ 2015-10-29 21:26 jklongint 阅读(258) 评论(0) 推荐(0)
摘要:题意:50000个5维向量,50000次询问每一维都不大于某一向量的向量个数,强制在线。 思路:做完这题才知道bitset效率这么高,自己本地测试了下1s可以操作1010个bit,orz简单粗暴 令S(i)表示第i维比当前向量的i维小的向量集,则答案为count(∩S(i)),0≤i‹5 每个向量都 阅读全文
posted @ 2015-09-23 09:32 jklongint 阅读(208) 评论(0) 推荐(0)
摘要:题意:我方n个军队和敌方m个军队进行一对一的对战,每个军队都有一个攻击力和防御力,只要攻击力不小于对方就可以将对方摧毁。问在能完全摧毁敌方的基础上最多能有多少军队不被摧毁。思路:按防御力从大到小考虑敌方的军队由我们哪只军队去摧毁,对每个敌方军队,维护我方军队可以摧毁它的集合,用S表示,从大到小考虑保... 阅读全文
posted @ 2015-09-04 21:49 jklongint 阅读(183) 评论(0) 推荐(0)
摘要:题意:有一个n*m的矩形,一辆车从左上角出发,沿一条路径走,路径是由矩形上每个单元格的边构成的,最后回到左上角,求车子在每个格子转过圈数的平方和。思路:假设需要记录每个格子转的顺时针的圈数(为负表示转的逆时针),可以考虑车子每次移动对各个格子的贡献:车子左移,路径上方所有格子转的圈数+1,路径下方所... 阅读全文
posted @ 2015-09-04 18:17 jklongint 阅读(230) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068题意:求一个字符串的最长回文子串思路:枚举子串的两个端点,根据回文串的定义来判断其是否是回文串并更新答案,复杂度O(N3)。枚举回文串的对称轴i,以及回文半径r,由i和r可确定一个子串,然后暴力判断... 阅读全文
posted @ 2015-09-03 19:08 jklongint 阅读(664) 评论(0) 推荐(0)
摘要:RMQ问题:对于长度为N的序列,询问区间[L,R]中的最值RMQ问题的几种解法:普通遍历查询,O(1)-O(N)线段树,O(N)-O(logN)DP,O(NlogN)-O(1)RMQ标准算法,O(N)-O(1)简单介绍:朴素的查询,不需要任何预处理,但结果是没有任何已知的信息可以利用,每次都需要从头... 阅读全文
posted @ 2015-09-02 00:38 jklongint 阅读(4232) 评论(0) 推荐(1)
摘要:题意:给一个字符串,求它的最小子串,使得原串是通过它重复得到的字符串的一个子串。思路:先求最小长度,最小循环长度可以利用kmp的next数组快速得到,求出长度后然后利用字符串最小表示法求循环节的最小表示即可。#pragma comment(linker, "/STACK:10240000")#inc... 阅读全文
posted @ 2015-08-27 00:09 jklongint 阅读(212) 评论(0) 推荐(0)
摘要:题意:给一些字符串的集合S和整数n,求满足长度为n只含charset = {'A'、'T‘、'G'、'C'}包含的字符不包含S中任一字符串的字符串的种类数。思路:首先对S建立ac自动机,考虑向ac自动机中的每种状态后加charset中的字符,如果终态不为“接受状态”,也就是不与S中的任一字符串匹配,... 阅读全文
posted @ 2015-08-25 03:22 jklongint 阅读(288) 评论(0) 推荐(0)
摘要:裸的区间第k大问题,划分树搞起。#pragma comment(linker, "/STACK:10240000")#include #include #include #include #include #include #include #include #include #include #i... 阅读全文
posted @ 2015-08-21 22:32 jklongint 阅读(198) 评论(0) 推荐(0)
摘要:题意:Q个询问,每个询问给定区间[L,R],求从里面任选两个数相同的概率。思路:莫队算法。用一个cnt数组记录当前区间每种数的个数,区间变化为1时O(1)的维护cnt数组,并可以O(1)的得到当前区间中与当前数相同的数的个数。 1 2 3 4 5 6 7 8 9 10 11 12 ... 阅读全文
posted @ 2015-08-15 21:50 jklongint 阅读(191) 评论(0) 推荐(0)
摘要:题意:http://acm.hdu.edu.cn/showproblem.php?pid=1506 如图,求最大的矩形面积思路:笛卡尔树:笛卡尔树是一棵二叉树,树的每个节点有两个值,一个为key,一个为value。光看key的话,笛卡尔树是一棵二叉搜索树,每个节点的左子树的key都比它小,右子树都比... 阅读全文
posted @ 2015-08-15 17:33 jklongint 阅读(283) 评论(0) 推荐(0)
摘要:题意:http://acm.hdu.edu.cn/showproblem.php?pid=5381思路:这个题属于没有修改的区间查询问题,可以用莫队算法来做。首先预处理出每个点以它为起点向左和向右连续一段的gcd发生变化的每个位置,不难发现对每个点A[i],这样的位置最多logA[i]个,这可以利用... 阅读全文
posted @ 2015-08-15 11:05 jklongint 阅读(306) 评论(0) 推荐(0)
摘要:题意:给一个长度为2000的字符串,10000次询问区间[L,R]内的不同子串的个数思路:对原串的每个前缀求一边后缀数组,询问[L,R]就变成了询问[L,n]了,即求一个后缀里面出现了多少个不同子串。于是对所有大于等于L的后缀统计一遍即可。 1 2 3 4 5 6 7 8 9 10... 阅读全文
posted @ 2015-08-12 14:39 jklongint 阅读(396) 评论(0) 推荐(0)
摘要:题意:在一个字符串里面找最长的[A][B][A]子串,其中[A][B]是回文串,[A]和[B]的长度相等思路:[A][B]是回文串,所以[B][A]也是回文串。先预处理出每个点的最大回文半径Ri,枚举[A][B]的对称轴位置p,那么就是要找最大的一个[B][A]的对称轴位置i,满足i#include... 阅读全文
posted @ 2015-08-12 13:41 jklongint 阅读(281) 评论(0) 推荐(0)