04 2017 档案
摘要:测试地址:Triangle题目大意:平面上有N(N≤50000)个点,要求选出其中的3个点,使得连成的三角形面积最大,求出这个最大面积。做法:这题需要用到旋转卡壳。首先O(N^3)的枚举肯定是炸的,那么怎么办呢?我们可以先求出凸包,可以证明最大的三角形顶点一定是凸包的...
阅读全文
摘要:测试地址:Triangle题目大意:平面上有N(N≤50000)个点,要求选出其中的3个点,使得连成的三角形面积最大,求出这个最大面积。做法:这题需要用到旋转卡壳。首先O(N^3)的枚举肯定是炸的,那么怎么办呢?我们可以先求出凸包,可以证明最大的三角形顶点一定是凸包的...
阅读全文
摘要:测试地址:Beauty Contest题目大意:平面上有N(N≤50000)个点,输出这些点之间最大的距离的平方。做法:这道题需要用到旋转卡壳。我们很容易想到枚举所有点对,然后求距离最大值,然而这是O(N^2)的,对于这一题是不行的,那么怎么办呢?有一个显而易见的结论...
阅读全文
摘要:测试地址:Beauty Contest题目大意:平面上有N(N≤50000)个点,输出这些点之间最大的距离的平方。做法:这道题需要用到旋转卡壳。我们很容易想到枚举所有点对,然后求距离最大值,然而这是O(N^2)的,对于这一题是不行的,那么怎么办呢?有一个显而易见的结论...
阅读全文
摘要:测试地址:特别行动队做法:这题需要用到DP斜率优化。设f[i]为拆分前i个士兵可获得的最大战斗力,sum[i]为前i个士兵的初始战斗力之和,很容易得到O(N^2)的方程:f[i]=max{f[j]+a(sum[i]-sum[j])^2+b(sum[i]-sum[j])...
阅读全文
摘要:测试地址:特别行动队做法:这题需要用到DP斜率优化。设f[i]为拆分前i个士兵可获得的最大战斗力,sum[i]为前i个士兵的初始战斗力之和,很容易得到O(N^2)的方程:f[i]=max{f[j]+a(sum[i]-sum[j])^2+b(sum[i]-sum[j])...
阅读全文
摘要:测试地址:Print Article题目大意:要打印一份有N(N≤500000)个词的文章,每个词有一个花费Ci,连续打一段词的花费为(ΣCi)^2+M,M为常数,求打印这份文章的最小花费。做法:这道题要用到DP的斜率优化。首先分析题目发现这道题显然可以用动态规划解决...
阅读全文
摘要:测试地址:Print Article题目大意:要打印一份有N(N≤500000)个词的文章,每个词有一个花费Ci,连续打一段词的花费为(ΣCi)^2+M,M为常数,求打印这份文章的最小花费。做法:这道题要用到DP的斜率优化。首先分析题目发现这道题显然可以用动态规划解决...
阅读全文
摘要:测试地址:聪聪可可做法:这题要求满足两点之间距离是3的倍数(也就是对3取模余数为0)的点对数目,我们知道求满足特定条件(一般和路径有关)的点对数目的问题一般可以用树分治算法解决。和其他同类题目一样,这道题目的O(N^2)算法非常显然,然而N可达20000,O(N^2)...
阅读全文
摘要:测试地址:聪聪可可做法:这题要求满足两点之间距离是3的倍数(也就是对3取模余数为0)的点对数目,我们知道求满足特定条件(一般和路径有关)的点对数目的问题一般可以用树分治算法解决。和其他同类题目一样,这道题目的O(N^2)算法非常显然,然而N可达20000,O(N^2)...
阅读全文
摘要:测试地址:Tree题目大意:给定一棵有N(N≤10000)个节点的带边权的树,我们称一个点对是合法的当且仅当两个点不相同且它们之间的距离≤K,求合法点对的数目。做法:既是树分治的论文题,又是男人八题的其中一题,妙啊......这道题需要用到树的点分治。因为,我们很容易...
阅读全文
摘要:测试地址:Tree题目大意:给定一棵有N(N≤10000)个节点的带边权的树,我们称一个点对是合法的当且仅当两个点不相同且它们之间的距离≤K,求合法点对的数目。做法:既是树分治的论文题,又是男人八题的其中一题,妙啊......这道题需要用到树的点分治。因为,我们很容易...
阅读全文
摘要:区间处理和统计是OI中一类重要的题型,而这类题目通常需要用高级数据结构维护,这里就先总结一下本人学习过的可以用于区间处理和统计的高级数据结构。注意,本人此处不提供各个数据结构的详细介绍或教学,详细教学请自行搜索。一、线段树线段树可以说是区间处理和统计问题的基础,它支持...
阅读全文
摘要:区间处理和统计是OI中一类重要的题型,而这类题目通常需要用高级数据结构维护,这里就先总结一下本人学习过的可以用于区间处理和统计的高级数据结构。注意,本人此处不提供各个数据结构的详细介绍或教学,详细教学请自行搜索。一、线段树线段树可以说是区间处理和统计问题的基础,它支持...
阅读全文
摘要:测试地址:序列操作做法:这个题是很久以前做的,大概去年8月份吧,但是忘记放博客上了,今天突然想起来补档。这个题虽然很容易看出是用线段树维护,但是要维护的信息太多了......简单整理一下就是:区间内0和1的数量,左端和右端连续0和连续1的长度,区间内最长的连续0和连续...
阅读全文
摘要:测试地址:序列操作做法:这个题是很久以前做的,大概去年8月份吧,但是忘记放博客上了,今天突然想起来补档。这个题虽然很容易看出是用线段树维护,但是要维护的信息太多了......简单整理一下就是:区间内0和1的数量,左端和右端连续0和连续1的长度,区间内最长的连续0和连续...
阅读全文
摘要:测试地址:D-query题目大意:有N个数,Q个询问,每次询问某个区间[L,R]内有多少不同的数。做法:这题我用主席树做过,题解请看这里。而这道题用莫队算法也能做,思考信息的转移:存储一个数组f表示每个数出现的次数,那么每次转移要么插入一个数,要么删除一个数,这样我们...
阅读全文
摘要:测试地址:小Z的袜子做法:设f(i)为颜色i在区间[l,r]内出现的次数,则区间[l,r]的答案为:ΣC(2,f(i))/C(2,r-l+1),面对这种东西线段树就无能为力了......怎么办呢?于是本人今天学习了传说中离线处理区间询问的无敌算法——莫队算法,感觉妙极...
阅读全文
摘要:测试地址:小Z的袜子做法:设f(i)为颜色i在区间[l,r]内出现的次数,则区间[l,r]的答案为:ΣC(2,f(i))/C(2,r-l+1),面对这种东西线段树就无能为力了......怎么办呢?于是本人今天学习了传说中离线处理区间询问的无敌算法——莫队算法,感觉妙极...
阅读全文
摘要:测试地址:Aragorn's Story题目大意:有一棵树,树上每个点有一个权值,要求支持以下操作:1.将某两点之间路径上的点权值增加(或减少)一个数;2.询问某点的权值。做法:这题用树链剖分做,就是很简单的区间修改裸题了,这里不再赘述。而用LCT做虽然也是挺裸的,但...
阅读全文
摘要:测试地址:Aragorn's Story题目大意:有一棵树,树上每个点有一个权值,要求支持以下操作:1.将某两点之间路径上的点权值增加(或减少)一个数;2.询问某点的权值。做法:这题用树链剖分做,就是很简单的区间修改裸题了,这里不再赘述。而用LCT做虽然也是挺裸的,但...
阅读全文
摘要:测试地址:洞穴勘测做法:听说这题可以用并查集水过......为了训练LCT还是不要做这种事了吧......根据题目描述,图无论怎么变化都是一个森林,那么我们就要用到LCT最经典的用法了:维护森林的连通性。然后link和cut就是模板了,检测两个点之间的连通性的话,我们...
阅读全文
摘要:测试地址:洞穴勘测做法:听说这题可以用并查集水过......为了训练LCT还是不要做这种事了吧......根据题目描述,图无论怎么变化都是一个森林,那么我们就要用到LCT最经典的用法了:维护森林的连通性。然后link和cut就是模板了,检测两个点之间的连通性的话,我们...
阅读全文
摘要:测试地址:弹飞绵羊做法:首先观察,从一个格子最多只能弹到另外一个格子,而一个格子能从多个格子弹到,并且只能向后弹,这个关系符合树的一对多关系,所以原图可以看成一片森林(为什么?因为从有些格子出发就直接弹飞了),点i的父亲是i+ki,那么操作就可以翻译成这样:1.询问某...
阅读全文
摘要:测试地址:弹飞绵羊做法:首先观察,从一个格子最多只能弹到另外一个格子,而一个格子能从多个格子弹到,并且只能向后弹,这个关系符合树的一对多关系,所以原图可以看成一片森林(为什么?因为从有些格子出发就直接弹飞了),点i的父亲是i+ki,那么操作就可以翻译成这样:1.询问某...
阅读全文
摘要:测试地址:荷马史诗做法:按照题目的定义,就是要求一个最优编码,最优编码就是哈夫曼编码,不懂的可以百度。我们可以通过构造哈夫曼树来找到最优编码,由于原来2进制编码时用到的哈夫曼树是二叉树,所以K进制编码时用到的哈夫曼树就是K叉树。K叉哈夫曼树的构造方法如下:用优先队列维...
阅读全文
摘要:测试地址:荷马史诗做法:按照题目的定义,就是要求一个最优编码,最优编码就是哈夫曼编码,不懂的可以百度。我们可以通过构造哈夫曼树来找到最优编码,由于原来2进制编码时用到的哈夫曼树是二叉树,所以K进制编码时用到的哈夫曼树就是K叉树。K叉哈夫曼树的构造方法如下:用优先队列维...
阅读全文
摘要:测试地址:Monkey Party题目大意:N只猴子坐成一圈,每只猴子有一个介绍时间,一开始每只猴子之间互不认识(除了自己认识自己),现在要对它们进行介绍使得它们之间互相认识,每一次介绍是发生在相邻的两只猴子之间的,每次介绍完后,两只猴子所认识的所有猴子都会互相认识,...
阅读全文
摘要:测试地址:Monkey Party题目大意:N只猴子坐成一圈,每只猴子有一个介绍时间,一开始每只猴子之间互不认识(除了自己认识自己),现在要对它们进行介绍使得它们之间互相认识,每一次介绍是发生在相邻的两只猴子之间的,每次介绍完后,两只猴子所认识的所有猴子都会互相认识,...
阅读全文
摘要:测试地址:Lawrence题目大意:一段铁路有N个节点,之间有N-1条边连成一条链,每个点有一个策略值,策略值都是正整数。现在要炸掉M条边,使得铁路的总策略值最小。总策略值是这样计算的:考虑每一个无序点对,如果该点对两点之间连通,那么就在总策略值中加上这两点的策略值的...
阅读全文
摘要:测试地址:Lawrence题目大意:一段铁路有N个节点,之间有N-1条边连成一条链,每个点有一个策略值,策略值都是正整数。现在要炸掉M条边,使得铁路的总策略值最小。总策略值是这样计算的:考虑每一个无序点对,如果该点对两点之间连通,那么就在总策略值中加上这两点的策略值的...
阅读全文
摘要:测试地址:Division题目大意:在一个有N个元素的整数集合S中选出M个子集,使得这M个子集的并为S,并且使总花费最小。选择一个子集的花费是(该子集中最大的元素-该子集中最小的元素)^2。做法:首先贪心分析,我们选择的子集在排过序后的数列中肯定是连续的一段,因为如果...
阅读全文
摘要:测试地址:Division题目大意:在一个有N个元素的整数集合S中选出M个子集,使得这M个子集的并为S,并且使总花费最小。选择一个子集的花费是(该子集中最大的元素-该子集中最小的元素)^2。做法:首先贪心分析,我们选择的子集在排过序后的数列中肯定是连续的一段,因为如果...
阅读全文
摘要:测试地址:软件包管理器做法:根据条件构图,可以看出原图只有N-1条边,而且不存在环,推断出原图是一棵树。如果把一个软件包依赖的软件包看做它的父亲,那么这就是一棵以0为根的有根树。然后我们再分析操作如何处理。设每个点的点权为0或1,为0表示未安装,为1表示已安装。对于i...
阅读全文
摘要:测试地址:软件包管理器做法:根据条件构图,可以看出原图只有N-1条边,而且不存在环,推断出原图是一棵树。如果把一个软件包依赖的软件包看做它的父亲,那么这就是一棵以0为根的有根树。然后我们再分析操作如何处理。设每个点的点权为0或1,为0表示未安装,为1表示已安装。对于i...
阅读全文
摘要:测试地址:方格染色做法:我们设红色为1,蓝色为0,ci,j为第i行第j列格子的颜色,那么根据条件:每个2*2的区域中1的数量为奇数,涉及奇偶性我们想到异或,所以将条件改写为:对于任意i>1,j>1有:ci-1,j-1 xor ci-1,j xor ci,j-1 xor...
阅读全文
摘要:测试地址:方格染色做法:我们设红色为1,蓝色为0,ci,j为第i行第j列格子的颜色,那么根据条件:每个2*2的区域中1的数量为奇数,涉及奇偶性我们想到异或,所以将条件改写为:对于任意i>1,j>1有:ci-1,j-1 xor ci-1,j xor ci,j-1 xor...
阅读全文
摘要:测试地址:区间做法:先把所有区间按长度从小到大排序,我们发现只要选定了左右端点,方案的花费就已经确定了,那么就把中间的区间都加上,然后询问有没有点被覆盖的次数达到m即可。这个显然可以用线段树处理,使每次询问复杂度为O(logn)。由于区间端点可能很大,所以需要离散化。...
阅读全文
摘要:测试地址:区间做法:先把所有区间按长度从小到大排序,我们发现只要选定了左右端点,方案的花费就已经确定了,那么就把中间的区间都加上,然后询问有没有点被覆盖的次数达到m即可。这个显然可以用线段树处理,使每次询问复杂度为O(logn)。由于区间端点可能很大,所以需要离散化。...
阅读全文
摘要:测试地址:航空管制做法:考虑存储原图的反图,然后进行加了一些限制的拓补排序,这个图的拓补序的反序就是第一问的答案。然后考虑第二问,我们可以贪心来做,我们先不管当前的航班,对其他航班进行拓补排序,当队列中没有办法再插入元素的时候,就是当前航班插入的时候了,这样得到的拓补...
阅读全文
摘要:测试地址:航空管制做法:考虑存储原图的反图,然后进行加了一些限制的拓补排序,这个图的拓补序的反序就是第一问的答案。然后考虑第二问,我们可以贪心来做,我们先不管当前的航班,对其他航班进行拓补排序,当队列中没有办法再插入元素的时候,就是当前航班插入的时候了,这样得到的拓补...
阅读全文
摘要:测试地址:抱歉,在大多数广为人知的OJ中都未找到这一题,只能在一个私人OJ中找到,这里就不贴了。题目大意:一排的珠子被编号为1~N,对珠子依次执行M个操作,每个操作都是将第Pi个位置的珠子和第Pi+1个位置的珠子调换位置,接下来有几组询问,每组询问有一个问题数Q,还有...
阅读全文
摘要:测试地址:Trade题目大意:给定连续T天的股市情况,包含四个参数api,bpi,asi,bsi,表示第i天买价为api一股,卖价为bpi一股,当天最多能买asi股,最多能卖bsi股,一天之内只能在买和卖中选择一个,另外限制任何一天手中股票不能超过maxp股,如果在一...
阅读全文
摘要:测试地址:Trade题目大意:给定连续T天的股市情况,包含四个参数api,bpi,asi,bsi,表示第i天买价为api一股,卖价为bpi一股,当天最多能买asi股,最多能卖bsi股,一天之内只能在买和卖中选择一个,另外限制任何一天手中股票不能超过maxp股,如果在一...
阅读全文
摘要:测试地址:Word Puzzles题目大意:在一个填满大写字母的N*M棋盘内找到询问的W个单词,输出出现点坐标和方向(方向从“向上为A”顺时针依次定义,如向右上为B,向右为C......)。做法:对所有待查字符串构建AC自动机,然后对每个方向查找一遍棋盘即可求出答案。...
阅读全文
摘要:测试地址:Word Puzzles题目大意:在一个填满大写字母的N*M棋盘内找到询问的W个单词,输出出现点坐标和方向(方向从“向上为A”顺时针依次定义,如向右上为B,向右为C......)。做法:对所有待查字符串构建AC自动机,然后对每个方向查找一遍棋盘即可求出答案。...
阅读全文
摘要:测试地址:Tour题目大意:在有N个点,M条有向边的有向图中找到若干个环,并使得每个点都在且只在其中一个环上,并使得环上的权值之和最小,输出这个最小值,如果不存在合法方案输出-1。做法:这个转化方法十分神奇,我们把一个点拆成两个点,一个点连接出边,一个点连接入边,构成...
阅读全文
摘要:测试地址:Tour题目大意:在有N个点,M条有向边的有向图中找到若干个环,并使得每个点都在且只在其中一个环上,并使得环上的权值之和最小,输出这个最小值,如果不存在合法方案输出-1。做法:这个转化方法十分神奇,我们把一个点拆成两个点,一个点连接出边,一个点连接入边,构成...
阅读全文
摘要:测试地址:The Fortified Forest题目大意:有N(2≤N≤15)棵树,每棵树有一个坐标(xi,yi),价值vi,长度li,要砍掉一些树建成围栏防护其他的树,求一个使砍掉的树的价值之和最小的方案,如果有多个方案满足条件,求砍掉的树最少的,输出这种方案中要...
阅读全文
摘要:测试地址:The Fortified Forest题目大意:有N(2≤N≤15)棵树,每棵树有一个坐标(xi,yi),价值vi,长度li,要砍掉一些树建成围栏防护其他的树,求一个使砍掉的树的价值之和最小的方案,如果有多个方案满足条件,求砍掉的树最少的,输出这种方案中要...
阅读全文
摘要:测试地址:假面舞会做法:这题看上去就是找环然后求最大公因数,然后下一步就不会做了,看了题解就跪了......主要这个处理方法太神奇了。首先建图肯定不能按照原来的图建,因为需要枚举起点来走,会TLE,所以我们对于原图a->b这条边,连一条a->b边权为1,再连一条b->...
阅读全文
摘要:测试地址:假面舞会做法:这题看上去就是找环然后求最大公因数,然后下一步就不会做了,看了题解就跪了......主要这个处理方法太神奇了。首先建图肯定不能按照原来的图建,因为需要枚举起点来走,会TLE,所以我们对于原图a->b这条边,连一条a->b边权为1,再连一条b->...
阅读全文
摘要:测试地址:Lexicographical Substring Search题目大意:给定一个字符串,有Q个询问,每个询问字符串中字典序第Ki小的本质不同的子串。做法:这几天学习了后缀自动机(Suffix Automaton,SAM),个人感觉除了clj的原论文,写得最...
阅读全文
摘要:测试地址:Lexicographical Substring Search题目大意:给定一个字符串,有Q个询问,每个询问字符串中字典序第Ki小的本质不同的子串。做法:这几天学习了后缀自动机(Suffix Automaton,SAM),个人感觉除了clj的原论文,写得最...
阅读全文
摘要:测试地址:Palindrome题目大意:求一个把一个字符串分割成两部分的方案,使得前面的部分包含的本质不同的回文子串数是后面的部分包含的本质不同的回文子串数的两倍,输出前面的部分所包含的字符数,如果有多个方案,输出全部方案中前面部分字符数的乘积,对10^9+7取模,如...
阅读全文
摘要:测试地址:Palindrome题目大意:求一个把一个字符串分割成两部分的方案,使得前面的部分包含的本质不同的回文子串数是后面的部分包含的本质不同的回文子串数的两倍,输出前面的部分所包含的字符数,如果有多个方案,输出全部方案中前面部分字符数的乘积,对10^9+7取模,如...
阅读全文
摘要:测试地址:回文串做法:这道题可以用Manacher+后缀数组来做,但是很慢,于是本人用了一个上午去学习了回文自动机(Palindromic Automaton,PAM)这个东西,它是一个可以接受字符串的所有回文子串的自动机,并且可以很方便地求出所有本质不同的回文子串的...
阅读全文
摘要:测试地址:回文串做法:这道题可以用Manacher+后缀数组来做,但是很慢,于是本人用了一个上午去学习了回文自动机(Palindromic Automaton,PAM)这个东西,它是一个可以接受字符串的所有回文子串的自动机,并且可以很方便地求出所有本质不同的回文子串的...
阅读全文

浙公网安备 33010602011771号