07 2018 档案

摘要:这种算法能够解决关于询问一棵树的子树的相关信息的问题。 算法的流程大概是这样: 1、dfs将一棵树建好,将节点的size、dfs序、重儿子、该dfs序对应的节点这些信息处理好(其他的信息具体问题具体分析)。 2、进入solve函数,先去解决非重儿子,然后将这些非重儿子的信息暴力清空。 3、接下来解决 阅读全文
posted @ 2018-07-31 10:51 温和的提比略 阅读(126) 评论(0) 推荐(0)
摘要:题意略。 思路:倒着使用单调队列,大的放在前,小的放在后。 详见代码: 阅读全文
posted @ 2018-07-30 20:47 温和的提比略 阅读(310) 评论(0) 推荐(0)
摘要:题意略。 思路: 首先是贪心, 我们从前往后依次从小到大考虑放哪个字符, 重点是判断放了这个字符后, 对于剩下的后缀是否存在合法解。 考虑每个位置的允许放的字符集合只有2 ^ 6种, 我们预处理一个后缀和f[i][j], 表示i~n中被集合j包含的个数。 考虑第i个位置放了字符c后, 要使得f[i+ 阅读全文
posted @ 2018-07-29 14:57 温和的提比略 阅读(246) 评论(0) 推荐(0)
摘要:题意略。 思路: 比如现在n = 11。那么我们观察a[1.....n]的出现次数: a[1]:2 ^ 10 + 10 * 2 ^ 9 a[2]:2 ^ 9 + 9 * 2 ^ 8 a[3]:2 ^ 8 + 8 * 2 ^ 7 ......... a[x]:2 ^ (n - x) + (n - x) 阅读全文
posted @ 2018-07-28 19:44 温和的提比略 阅读(130) 评论(0) 推荐(0)
摘要:题意略。 思路: 这种字符串的模拟题,应该熟练使用stringstream。 详见代码: 阅读全文
posted @ 2018-07-28 15:30 温和的提比略 阅读(243) 评论(0) 推荐(0)
摘要:题意略。 思路: 由于这是一颗无根树,我们可以贪心地来删去边。 详见代码: 阅读全文
posted @ 2018-07-28 15:27 温和的提比略 阅读(245) 评论(0) 推荐(0)
摘要:题意略。 思路: 这个题目求的是第一个可行解,由此想到用二分试探的方式来解决。 现在讲讲怎么验证该解是否合理: 先用floyd求出两两之间的最短距离。 dp[ i ][ j ]表示,i 到 j 至少要充几次电,如果dist[ i ][ j ] <= 当前规定的试探值,那么令dp[ i ][ j ] 阅读全文
posted @ 2018-07-28 15:24 温和的提比略 阅读(204) 评论(0) 推荐(0)
摘要:题意略。 思路:数论题。 阅读全文
posted @ 2018-07-27 09:40 温和的提比略 阅读(243) 评论(0) 推荐(0)
摘要:题意略。 思路: 可知对于一个拥有n个点的图来说,它至少需要有n - 1条边来维持连通性,而且数字1恰好与后面的n - 1个数字互质; 至于n个点的图可以产生合法的互质边的个数的上限,我们可以通过莫比乌斯反演来求得。 我这个题卡在寻找具体的质数对上,后来发现网上别的博客上说n到600时就可以产生1e 阅读全文
posted @ 2018-07-26 14:56 温和的提比略 阅读(150) 评论(0) 推荐(0)
摘要:题意略。 思路:本题的思路总的来说就是暴力 + 剪枝。 我们依然用线段树来维护: 定义结点node{ l , r , minn , contirbute} 分别为某个区间的左右端点,和该区间(b序列)内的最小值与该区间对答案的贡献。 当我们修改到某一个区间的时候,如果该区间的minn > 1,那么m 阅读全文
posted @ 2018-07-26 08:52 温和的提比略 阅读(804) 评论(0) 推荐(0)
摘要:题意略。 思路: 典型的斐波那契博弈,这里说一下结论: 如果先手面对的n不是斐波那契数,那么先手必胜;否则后手胜。 详见代码: 阅读全文
posted @ 2018-07-25 10:43 温和的提比略 阅读(120) 评论(0) 推荐(0)
摘要:题意略。 思路: 题中提到的3种操作,一个是将长方形的n减少1,一个是将m减少1,一个是将n和m同时减少1,都是将长方形规模减少的的操作。 现在我们可以知道,(1,1)先手必输;(1,2),(2,1),(2,2) 先手必胜。 所以先手如果足够聪明的话,就只要尽可能地让当前这两个维度为偶数,最终一定能 阅读全文
posted @ 2018-07-25 10:05 温和的提比略 阅读(111) 评论(0) 推荐(0)
摘要:题意略。 思路: 其实我们没有必要关注每个数字的位置,我们只要把大的数字放在小的数字上就可以了,这样它的位置必然会发生变换。 在变换时,这个替换的序列越长越好,每个序列对答案的贡献就是该序列的长度 - 1。 我们可以把这个题抽象为一个柱形图,每个柱子的下标为某个数字,且从左向右下标数字减小,该柱子的 阅读全文
posted @ 2018-07-24 21:05 温和的提比略 阅读(124) 评论(0) 推荐(0)
摘要:题意略。 思路: 我们先把所有字符串处理成 ")))((((" 这样的形式。然后我们把这些字符串排个序,按照min(l,r)来排,小的在前,在我的代码中,l为 ( 的个数,r 为 ) 的个数。 然后我们从头到尾扫,l > r的,我们把它放在左边;l < r的,我们把它放在右边。这样排的原因是,我希望 阅读全文
posted @ 2018-07-24 20:52 温和的提比略 阅读(193) 评论(0) 推荐(0)
摘要:题意略。 思路: 由于这个长方体是可以翻转的,所以我们不必考虑小长方体3个维度的出处,反正3条边一定有长有短能分出大小。 现在我们来考虑A,B,C三个数字,如果它们3个产生的因子互不相同,分别产生了a,b,c个因子,那么本题的答案就是a * b * c。 可是在现实中,这三个数字是会产生重合的因子的 阅读全文
posted @ 2018-07-24 19:54 温和的提比略 阅读(149) 评论(0) 推荐(0)
摘要:题意略。 思路:又忘了dp,搜索这种暴力方法了。。。。 阅读全文
posted @ 2018-07-23 10:41 温和的提比略 阅读(128) 评论(0) 推荐(0)
摘要:题意略。 思路: 我们总是假设a > b,那么现在有两种情况: 1.a - b < b 2.a - b >= b 在处于第一种情况下,我们只有一种选择,也即把 a 变成 b,而原有的b变成 a - b。 在第二种情况时,我们分类考虑一下: 1.当 (b,a % b) 为必败态时,我们直接从当前状态转 阅读全文
posted @ 2018-07-23 08:33 温和的提比略 阅读(121) 评论(0) 推荐(0)
摘要:题意略。 思路: 从中间开始向两边搜索,寻求第一个比当前元素大/小的元素的位置,可用单调栈来维护。 阅读全文
posted @ 2018-07-22 16:12 温和的提比略 阅读(102) 评论(0) 推荐(0)
摘要:题意略。 思路:dfs记忆化搜索即可。 阅读全文
posted @ 2018-07-22 16:07 温和的提比略 阅读(125) 评论(1) 推荐(1)
摘要:题意略。 思路: 双向bfs。 如图,对于曼哈顿距离为5的地方来说,除去两端的位置,其他位置的状态不会超过曼哈顿距离为4的地方的状态的两倍。 所以,最大曼哈顿距离为n + m。最多的状态不过2 ^ (n + m)。 这个复杂度我们不能接受,但是如果我们从两边向中间bfs的话, 每次bfs的复杂度为2 阅读全文
posted @ 2018-07-21 21:08 温和的提比略 阅读(230) 评论(0) 推荐(0)
摘要:dfs序的使用。。。。 阅读全文
posted @ 2018-07-21 21:00 温和的提比略 阅读(233) 评论(0) 推荐(0)
摘要:题意略。 思路: 我们应该着重关注负数对当前数列的影响,由于前缀和的性质,我们都是从当前数字向前加,这其实也是在枚举以哪个下标作为开头。 详见代码: 阅读全文
posted @ 2018-07-20 20:01 温和的提比略 阅读(125) 评论(0) 推荐(0)
摘要:题意略。 思路: 本题和POJ1904颇为相似,只是那个最大匹配没有现成的,要我们自己求出来。并且要给每一个单身的王子/公主现找一个虚拟的对象。 这也是合乎情理的,王子每一次换一个公主时,可能会导致某一个王子失去他的原配,然而同样也会有另一个单身王子找到公主。 这里注意,每一个虚拟王子要喜欢所有公主 阅读全文
posted @ 2018-07-19 19:47 温和的提比略 阅读(175) 评论(0) 推荐(0)
摘要:题意略。 思路: 我们按大臣给出的完美匹配,将王子向少女和少女向王子连一条双向边,这样,这张图里就出现了n个强连通分量。如果将王子记为x,将少女记为y,则: 如果xi 不再选择 yi,而是选择了 yj ,为了保持匹配不变,xj需要选择yi,或者 xj 选择了 yk ,最终 xk 选择了 yi。不论如 阅读全文
posted @ 2018-07-19 14:08 温和的提比略 阅读(137) 评论(0) 推荐(0)
摘要:题意略。 思路: 由求出最小修改字符个数可知,这应该是一个dp,当长度为i + 1的串想利用上长度为i的串的时候,我们是需要知道前几个字符的,以防出现错误基因串。 然而我们得到的长度为i的合法字符串不知道会被改成什么样子,所以我们可以给它分个类,假设它以这些错误基因串的前缀结尾的话, 应该有sum( 阅读全文
posted @ 2018-07-18 15:08 温和的提比略 阅读(148) 评论(0) 推荐(0)
摘要:题意略。 思路: 我们先不考虑[(i , j) == 1],在此情况下,其实这个值是sum( [ (i , j) == 1,2,3,....,n ] ) 这些情况。我们要求的仅仅是其中的第一部分而已。也即: F(1) = f(1) + f(2) + f(3) + .... + f(n)。[1,2,3 阅读全文
posted @ 2018-07-17 10:41 温和的提比略 阅读(216) 评论(0) 推荐(0)
摘要:思路:题目要求所有点到1号点最小距离不变,所以我们采用单源最短路。考虑spfa,对于每一个点来说都是被更新,我们只要记住在这些更新该点的边里 dist最短且cost尽量小的,而且这张图到最后一定是一棵树,我们只需要记录下每个cost[i],最后整体相加就行了。 详见代码: 阅读全文
posted @ 2018-07-17 09:10 温和的提比略 阅读(137) 评论(0) 推荐(0)
摘要:题意略。 思路:二分。注意当利率高且m比较小的时候,每个月的偿还可能会大于本金,所以我们二分的右边界应该要设为2 * 本金。 详见代码: 阅读全文
posted @ 2018-07-16 10:15 温和的提比略 阅读(145) 评论(0) 推荐(0)
摘要:题意:给你两个等长的数列,让你在两个数列中各选择一个数字,使得这两个数的gcd是这n * n种组合中最大的。 思路:如果上来就考虑分解因式什么的,就想偏了,假设数列1的最大数为max1,数列2的最大数为max2,我们知道,这个max_gcd一定是在 1~max(max1,max2)中间的。我们一 一 阅读全文
posted @ 2018-07-14 21:14 温和的提比略 阅读(135) 评论(0) 推荐(0)
摘要:题意略。 思路: 将每一个点的坐标 (x,y,z) 与 (1,1,1) 相减,得到向量 (x - 1,y - 1,z - 1) 我们实际上就是要求出 这样互质的三元组有多少对就行了。 我们把这个长方体分成3部分: 1.三条坐标棱 2.在坐标棱上的三个表面(除去坐标棱) 3.长宽高分别为[L - 1, 阅读全文
posted @ 2018-07-14 13:39 温和的提比略 阅读(131) 评论(0) 推荐(0)
摘要:题意略。 思路: 本题实质上就是在问一共有多少种合理的匹配,使得括号匹配合法。我给每种情况编号,用一个cnt来记录,( 则cnt += 1;) 出现则cnt -= 1。 最后只要把相反数的个数相乘后相加就可以得到最后的结果。但是要注意,像 )( 这样的串是没有意义的, 因为不可能有别的串来匹配它来使 阅读全文
posted @ 2018-07-12 20:53 温和的提比略 阅读(158) 评论(0) 推荐(0)
摘要:题意略。 思路: 由于xi的选取是任意的,所以我们不用去理会题目中的xi数列条件。主要是把关注点放在长度为L的线段覆盖至少k个整数这个条件上。 像这种取到最小的合法解的问题,我们应该要想到使用二分法来试探。 那么在验证时,如果我们要验证下标为i的的这个项是否能被一个包含k个元素的区间覆盖,就要枚举这 阅读全文
posted @ 2018-07-12 19:43 温和的提比略 阅读(166) 评论(0) 推荐(0)
摘要:题意略。 思路:为了更好地求出一段连续数字的异或和,我们可以用前缀异或和来维护,现在我们只需要考虑每一个在数组中的数字向前异或,且在指定范围内, 异或值为全1的个数有多少个。算出每一个位子能做出的贡献,最后相加就可以了。 比如说现在的前缀xorsum = 1010,我们只需要知道在当前位置之前有多少 阅读全文
posted @ 2018-07-12 10:07 温和的提比略 阅读(105) 评论(0) 推荐(0)
摘要:题意略。 思路:求出凸包后,ans = 在凸包上的边 * q - 凹陷个数 * p。 一条边上,一个端点在凸包上,另一个端点在凸包内,则一定是凹陷的一条边,我们单向地来扫这些边,记录第一个点在凸包上,而第二个点不在凸包上的边的 个数,这些记录的总和也就是凹陷的总数。由于一个凹陷总是可以被凸包上的一条 阅读全文
posted @ 2018-07-11 09:39 温和的提比略 阅读(119) 评论(0) 推荐(0)
摘要:题意略。 思路: 由于不重合这个性质,我们可以将每一个堆叠的圆圈单独拿出来考虑,而不用去考虑其他并列在同一层的存在, 在贪心解法下,发现,被嵌套了偶数层的圆圈永远是要被减去的,而奇数层的圆圈是要加上的。 详见代码: 阅读全文
posted @ 2018-07-10 10:54 温和的提比略 阅读(166) 评论(0) 推荐(0)
摘要:题意略。 思路: 尺取法,依然是要利用之前的结果。 感觉时间复杂度太高了,竟然也过了。 阅读全文
posted @ 2018-07-10 10:47 温和的提比略 阅读(122) 评论(0) 推荐(0)
摘要:题意略。 思路: 有两个点要注意一下: 1.这个菱形矩阵是8对称的,也即可以是沿45°对角线对称。 2.菱形矩阵上的数字表明了这个点到中心0点的距离,这对于确定位置有帮助。 这个题目简直刷新人生观,这么暴力的做法也能过。。。。 阅读全文
posted @ 2018-07-10 10:44 温和的提比略 阅读(213) 评论(0) 推荐(0)
摘要:题意略。 思路: 这k个点应该放在这棵树的直径上,并且能连成一条路径。如果k比树的直径上的点要多,那么我们就不用把这k个点都用上, 只需要把这棵树直径上所有的点都覆盖上就行了。如果k比树的直径上的点要少,那么我们尽量使这k个点放在这个直径的中心位置。 这个我们可以简单说一下: 首先,把这k个点放在直 阅读全文
posted @ 2018-07-10 10:36 温和的提比略 阅读(299) 评论(0) 推荐(0)
摘要:题意略。 思路: 第一问: 递归地来写,找对称,发现关于(1<<y) - 1和(1<<y)对称的数字做 & 结果为0。 第二问: 6,7特殊考虑。循环左移(1<<y) ~ (1<<(y + 1) - 1),可以保证这个区间内的值与下标做 & 结果不为0。然而如果在这个段内只有1<<y这一个数,那么 阅读全文
posted @ 2018-07-04 08:58 温和的提比略 阅读(126) 评论(0) 推荐(0)
摘要:题意略。 思路:一个拓扑排序的题目吧。肯定是要先处理后面那个任务,再处理前面那个任务,我的思路是尽力先把主处理器能操作的先操作完,然后再把副处理器能操作完的再操作完,这样循环,直到处理完全部。 定义total变量为已经处理完的任务总数。 详见代码: 阅读全文
posted @ 2018-07-03 17:51 温和的提比略 阅读(168) 评论(0) 推荐(0)
摘要:题意略。 思路: 将字符分桶,然后暴力去扫,扫完合并。假设有k个桶,每个桶里有n / k个数,那么我们应该要扫 n / (2 * k)次,每次的复杂度是k,最后算得复杂度是O(n)。 详见代码: 阅读全文
posted @ 2018-07-03 11:07 温和的提比略 阅读(141) 评论(0) 推荐(0)
摘要:题意略。 思路: 开始的时候,定义dp[i]:当前行在第i行,i~n有多少种排列方式,如果i为f,那么dp[i] = dp[i + 1],因为第i + 1条语句只能放在f后且向右缩进一位; 如果i为s,那么dp[i]还与第i行的缩进有关。因此我们增加缩进这个状态。 定义dp[i][j]:当前行在第i 阅读全文
posted @ 2018-07-03 09:07 温和的提比略 阅读(124) 评论(0) 推荐(0)
摘要:题意略。 思路: 可以看成是所有的云彩照常运动,而月亮在跑。只要两个云彩相交后,在分离前月亮能赶到,就算是符合题意的。 可以知道,两个相隔越远的相向运动地云彩是越有可能符合题意的,因为它们相遇所用时间更长,这样月亮越有可能赶到。 假设云彩1为(l1,r1) ,云彩2为(l2,r2) ,r1 < l2 阅读全文
posted @ 2018-07-02 18:00 温和的提比略 阅读(178) 评论(0) 推荐(0)
摘要:题意略。 思路:如图 详见代码: 阅读全文
posted @ 2018-07-02 17:40 温和的提比略 阅读(140) 评论(0) 推荐(0)