随笔分类 -  思维题

1 2 3 4 5 ··· 7 下一页
摘要:U2 把坐标转(x, y)换成(x, y - x * x)之后就是求个上凸包 阅读全文
posted @ 2019-11-05 11:28 NotNight 阅读(252) 评论(0) 推荐(0)
摘要:Natasha, Sasha and the Prefix Sums 我们考虑每种方案的贡献放到最靠右的最大前缀上, 我们枚举最大的位置和最大的值, 发现左边和右边的方案数都可以用卡特兰数表示。 阅读全文
posted @ 2019-11-03 20:36 NotNight 阅读(168) 评论(0) 推荐(0)
摘要:Mobile Phone Network 先把k个边加进去, 然后用m条边从小到达能加就加, 那么对于m条边中剩余的那些边(u, v, w) 只有在树形成的路径(u, v)上存在一条比w大的边才能放进去, 那么路径(u, v)上所有边小于等于w 用每条边更新一次用并查集维护, 用st表压标记可能会T 阅读全文
posted @ 2019-10-31 13:06 NotNight 阅读(190) 评论(0) 推荐(0)
摘要:Chattering L(i, j)表示从 i 开始 2 ^ j 秒之后能到达的最左端 R(i, j)表示从 i 开始 2 ^ j 秒之后能到达的最右端 那么L(i, j) = min(L(t, j - 1)) L(i, j - 1) <= t <= R(i, j - 1) R(i, j) = ma 阅读全文
posted @ 2019-10-28 13:07 NotNight 阅读(240) 评论(0) 推荐(0)
摘要:Self-exploration 对于给定的c00, c01, c10, c11, 我们能得出0的段数, 1的段数, 0的个数, 1的个数。 然后就是用隔板法算方案数, 对于小于A这个操作, 我们枚举小于的位置用同样的方法算方案数就好啦。 阅读全文
posted @ 2019-10-23 11:19 NotNight 阅读(160) 评论(0) 推荐(0)
摘要:Two Prefixes 在纸上画了画感受一下可以感觉和循环节有关, 我们把每个可以表示的串写成 pre_a_i + pre_b_j的形式, 我们使得每个串在 i 最大的时候被统计到, 那么我们考虑答案为n * m - 重复的串个数, 对于pre_a_i + pre_b_j 这个串, 我们记b[0] 阅读全文
posted @ 2019-10-21 21:56 NotNight 阅读(390) 评论(0) 推荐(1)
摘要:DFS 考虑dfs的非树边全部都是反祖边, 对于新加的一条边那么所有它一定是一条反祖边, 那么用线段树把 对于这条边不可行的点全部ban掉就好了。 阅读全文
posted @ 2019-10-17 14:52 NotNight 阅读(191) 评论(0) 推荐(0)
摘要:Interstellar battle 对于每个联通块的贡献我们把它放到深度最低的那个点上面去。 那么一个点有贡献就是它的父亲被摧毁了并且自己没有被摧毁。 然后把所有概率加起来就是期望了。 阅读全文
posted @ 2019-10-16 18:40 NotNight 阅读(159) 评论(0) 推荐(0)
摘要:HDU - 6161 每次改变log个点,map啥的存一存就好。 阅读全文
posted @ 2019-10-13 15:02 NotNight 阅读(118) 评论(0) 推荐(0)
摘要:Adilbek and the Watering System 为什么这个题这么水, 感觉已经写过一万遍了, 还拿了一血。 HDU - 5380是这道题的加强版呀。 阅读全文
posted @ 2019-10-09 10:40 NotNight 阅读(398) 评论(0) 推荐(0)
摘要:Zoning Restrictions 发现从左往右dp没有办法dp, 可以想到最大值的性质, 我们考虑构建笛卡尔树的过程。 如果 i 的l, r 的最大值, 那么经过 i 点的线段可以全部在枚举 i 的时候处理掉。 dp[ i ][ j ][ k ] 表示只关注i - j之间的点和线段所能得到的最 阅读全文
posted @ 2019-09-26 16:27 NotNight 阅读(218) 评论(0) 推荐(0)
摘要:Koala and Notebook 首先肯定要把边拆点, 就变成了最短路问题, 最短路相同的字典序要求最小。 所以我们先bfs找出最短路图建边, 然后dfs把字典序从小到达枚举去更新点, 这样就是字典序最小的。 其实可以一遍bfs就完成的。 阅读全文
posted @ 2019-09-25 18:33 NotNight 阅读(252) 评论(0) 推荐(0)
摘要:HDU - 5741 我们枚举段的起点和终点, 那么每一种情况0的范围是[lx, rx], 1的出现范围是[ly, ry], 可以在二维平面上用矩形表示。 然后问题就变成了询问点有没有被至少一个矩形覆盖, 扫描线 + 树状数组就可以了。 阅读全文
posted @ 2019-09-13 16:55 NotNight 阅读(189) 评论(0) 推荐(0)
摘要:HDU - 5735 感觉这个思路相当巧妙啊。。 考虑最普通的 dp[ i ] = max(dp[ j ] + w[ i ] opt w[ j ]), j 是 i 的祖先。 把(2 << 16) 分成前八位和后八位去优化最朴素的dp。 修改遍历后八位, 查询遍历前八位。 阅读全文
posted @ 2019-09-13 15:53 NotNight 阅读(156) 评论(0) 推荐(0)
摘要:HDU - 5770 没想出来, 感觉不应该啊, 没有想到转换成二维上的点的问题。 对于对钥匙和宝藏(u, v), 如果lca != u && lca != v 那么起点从u子树出发, 终点在v子树就能得到贡献。 子树在dfs序下是连续一段, 所以就对应到二维平面一个矩形加上一个数值, 求值最大的点 阅读全文
posted @ 2019-09-12 16:05 NotNight 阅读(239) 评论(0) 推荐(0)
摘要:Complete Mirror 嗯嗯嗯。。 调了一万年。 就是把树hash一下, 然后dfs两次求合法的根。 阅读全文
posted @ 2019-07-21 22:28 NotNight 阅读(186) 评论(0) 推荐(0)
摘要:HDU - 5357 有很显然的 nlogn 的写法, 但是肯定过不了。。 感觉很巧妙的一道题, 充分利用了性质。 match[ i ] 表示和 i 匹配的是谁 a[ i ] 表示从 i 开始往后有多少个合法段。 b[ i ] 表示从 j 开始往前有多少个合法段。 up[ i ] 表示真包含 i, 阅读全文
posted @ 2019-07-20 11:40 NotNight 阅读(192) 评论(0) 推荐(0)
摘要:HDU - 5358 首先把公式拆开来, i,j 的贡献分开算。 从一个点开始的值只有LOG个。 一个很直观的思路就是二分出所有的分界点, 然后T了。 考虑优化就是从1 扫到 n的时候用35个指针去维护分界点, 因为是单调的所以是n * logn的复杂度。 不过这个题好像有点卡常。 阅读全文
posted @ 2019-07-17 15:04 NotNight 阅读(207) 评论(0) 推荐(0)
摘要:HDU - 5353 为什么我在自己演自己啊, 加了个特判结果下一次正确的时候没有把图清空, 找了半天bug。 先枚举一条边的状态就能推出全部, 输出过程用拓扑排序。 阅读全文
posted @ 2019-07-17 14:06 NotNight 阅读(149) 评论(0) 推荐(0)
摘要:HDU - 5370 f[ i ] 表示顶点数为 i 的二叉树的种数, 其实就是卡特兰数。 dp[ i ][ j ] 表示 i 个顶点分给 j 个二叉树的方案数, 这个是个 n ^ 3 的dp。 然后根据提供的信息建出二叉树, 我们考虑如何计算, 对于在 u 的左儿子添加了 x 个点的二叉树, 我们 阅读全文
posted @ 2019-07-16 20:20 NotNight 阅读(101) 评论(0) 推荐(0)

1 2 3 4 5 ··· 7 下一页