随笔分类 -  思维题

摘要:Cinema 感觉这个题好神啊。。。 首先如果 n 比 m 大, 我们先旋转90度。 我们要加入一个(x, y)的时候, 我们枚举答案所在的行离 x 的距离 g , 然后对于x + g 行来说 我们找到(x + g, y)左边的第一个和右边的第一个未被占的位置,更新答案, 如果 g > 答案 退出。 阅读全文
posted @ 2019-05-20 00:31 NotNight 阅读(218) 评论(0) 推荐(0)
摘要:Jamie and Tree 我们按 1 号点为根建dfs序线段树。即使换了根, 我们也能通过分类讨论去更新求答案。 阅读全文
posted @ 2019-05-16 11:33 NotNight 阅读(114) 评论(0) 推荐(0)
摘要:Subset Sums 把所有集合分成大于sqrt(n)和小于sqrt(n)的集合, 处理出每两个集合有交集是多大之后就可以在sqrt(n)的复杂内完成一次操作。 阅读全文
posted @ 2019-05-14 16:57 NotNight 阅读(148) 评论(0) 推荐(0)
摘要:Nearest Leaf 没想到在dfs的过程中用线段树维护所有点到当前点的距离。 阅读全文
posted @ 2019-05-14 01:16 NotNight 阅读(94) 评论(0) 推荐(0)
摘要:Delivery Club 首先二分答案, 我们考虑dp去check 我们可以发现所有状态要从两个点在 i 和 i - 1转移过来。 所以我们令dp[ i ] 表示 能否到达两个快递员在分别 i 号点 和 i - 1号点的状态。 转移就是把在 i 号位置的快递员不断地往后移, 如果能移到 j && 阅读全文
posted @ 2019-05-08 00:02 NotNight 阅读(289) 评论(0) 推荐(0)
摘要:Tanks 最关键的一点就是怎么判方案是否存在。。 只要存在若干个坦克之和的sum % k == v % k 就有解, 否则无解。 我怎么想不到呢。。。 阅读全文
posted @ 2019-05-06 19:56 NotNight 阅读(135) 评论(0) 推荐(0)
摘要:Road Projects 根据基环分类讨论讨论。。 阅读全文
posted @ 2019-05-06 14:38 NotNight 阅读(112) 评论(0) 推荐(0)
摘要:Streets and Avenues in Berhattan 我们首先能发现在最优情况下最多只有一种颜色会分别在行和列, 因为你把式子写出来是个二次函数, 在两端取极值。 然后我们就枚举哪个颜色会分别在行和列。 然后枚举这种颜色在行的个数, 再求出需要在列放的最少的这种颜色的个数。 这个我们可以 阅读全文
posted @ 2019-04-29 16:06 NotNight 阅读(161) 评论(0) 推荐(0)
摘要:Little Elephant and Broken Sorting 怎么感觉这个状态好难想到啊。。 dp[ i ][ j ]表示第 i 个数字比第 j 个数字大的概率。转移好像比较显然。 阅读全文
posted @ 2019-04-22 19:54 NotNight 阅读(203) 评论(0) 推荐(0)
摘要:PolandBall and Gifts 转换成置换群后, 对于最大值我们很好处理。 对于最小值, 只跟若干个圈能否刚好组能 k 有关。 最直观的想法就是bitset优化背包, 直接搞肯定T掉。 我们能再发掘一些性质, 就是本质不能的圈的大小最多有sqrt(n)个, 因为1 + 2 + 3 ... 阅读全文
posted @ 2019-04-22 13:57 NotNight 阅读(186) 评论(0) 推荐(0)
摘要:Expected diameter of a tree 我们先两次dfs计算出每个点能到达最远点的距离。 暴力计算两棵树x, y连边直径的期望很好求, 我们假设SZ(x) < SZ(y) 我们枚举 x 的每个端点, 二分找到分界点, 复杂度为SZ(x) * log(SZ(y)) 其实我们对于每次询问 阅读全文
posted @ 2019-04-21 21:33 NotNight 阅读(113) 评论(0) 推荐(0)
摘要:Constrained Tree 没写出来好菜啊啊。 首先根据输入我们能算出某些节点的左儿子的范围, 右儿子的范围(此时并不准确) 然后我们在划分u这个节点的时候我们从左右开始用树状数组check每一个点是否可行, 即这个点没有被覆盖, 因为左右同时开始所以复杂度是nlognlogn,以前做过这种从 阅读全文
posted @ 2019-04-19 13:09 NotNight 阅读(144) 评论(0) 推荐(0)
摘要:Neatnes dfs一下用set维护能不能走, 进入的时候点亮灯, 回溯的时候灭灯。 阅读全文
posted @ 2019-04-17 15:18 NotNight 阅读(158) 评论(0) 推荐(0)
摘要:Space Isaac 我们定义第一个集合为a, 第二个集合为b 先把a数组排序, 然后我们会以线段的形式得到b集合。 我们先用a[ 1 ]去和 b 中的元素结合, 只有size(a) 个数字未被覆盖, 我们从这些数组中选答案。 枚举这些数字, 什么情况下才它是答案呢, 就是移到a[ 2 ], a[ 阅读全文
posted @ 2019-04-17 00:10 NotNight 阅读(146) 评论(0) 推荐(0)
摘要:Sereja and Cinema 首先我们可以发现除了第一个人, 其他人都会坐在已入坐人的旁边。 难点在于计算方案数。。 我们可以从外往里把确定的人用组合数算上去,然后缩小范围。 阅读全文
posted @ 2019-04-16 11:17 NotNight 阅读(205) 评论(0) 推荐(0)
摘要:A Shade of Moonlight 列列式子发现, 对于同一个云来说只有反向的云才能和它相交, 然后我们发现这个东西有单调性,然后二分就好啦。 阅读全文
posted @ 2019-04-09 20:05 NotNight 阅读(227) 评论(0) 推荐(0)
摘要:Cardboard Box 贪了个半天贪不对, 我发现我根本就不会贪心。 我们先按b排序, 然后枚举选两颗心的b的最大值, 在这个之前的肯定都要选一个, 因为前面的要是一个都没选的话, 你可以把当前选两颗心的替换成前面选两颗心, 然后用平衡树或者线段树维护一下前k大和就好啦。 阅读全文
posted @ 2019-04-08 12:45 NotNight 阅读(230) 评论(0) 推荐(0)
摘要:Opening Portals 我们先考虑如果所有点都是特殊点, 那么就是对整个图求个MST。 想在如果不是所有点是特殊点的话, 我们能不能也 转换成求MST的问题呢? 相当于我们把特殊点扣出来, 然后求出两两之间的最短路, 然后求MST, 但直接这样暴力做 肯定不行。 我们先跑个多元最短路, 找到 阅读全文
posted @ 2019-04-03 19:33 NotNight 阅读(199) 评论(0) 推荐(0)
摘要:Place Your Ad Here 把没用的第一类区间去掉之后, 排序, 然后枚举第二类区间, 在上面死命二分就好了。 阅读全文
posted @ 2019-04-02 23:59 NotNight 阅读(127) 评论(0) 推荐(0)
摘要:Souvenirs 我们将询问离线, 我们从左往右加元素, 如果当前的位置为 i ,用一棵线段树保存区间[x, i]的答案, 每次更新完, 遍历R位于 i 的询问更新答案。 我们先考虑最暴力的做法, 我们先找到位于 i 前面第一个 j, a[ j ] > a[ i ], 那么x 属于 [ 1, j 阅读全文
posted @ 2019-04-01 00:34 NotNight 阅读(179) 评论(0) 推荐(0)