上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 22 下一页
摘要: Link Solution 有一个非常显然的性质,一个洞最终容纳的一定是一段横坐标连续的老鼠。就是说不可能出现交叉的请况。数学证明也是非常的容易,懒得写了。 那么就预先将老鼠和洞分别按横坐标排序。这样之后,容易想到 dp 状态 \(dp[i][j]\) 表示用前 \(i\) 个洞容纳前 \(j\) 阅读全文
posted @ 2020-12-26 11:00 Kreap 阅读(68) 评论(0) 推荐(0) 编辑
摘要: Link Solution 和弹飞绵羊有点像,所以想这题可能和分块有什么关系。于是想到按值域来分块。 当 \(k\) 比较大的时候,容易发现跳的次数就非常少,以至于暴力跳都能过。于是当 \(k > \sqrt{n}\) 的时候,不妨就直接暴力地跳。复杂度 \(O(n\sqrt{n})\) 当 \(k 阅读全文
posted @ 2020-12-26 08:33 Kreap 阅读(61) 评论(0) 推荐(0) 编辑
摘要: Link Solution 记得很早以前就看了这道题了,当时不会做就一直没做。后来发现 \(m\leq 2\),我也是服了。 \(m=1\) 应该相当好做,就是选 \(K\) 段不相交的段,使收益最大。容易想到线段树优化模拟费用流,复杂度 \(O(K\log n)\)。(因为太麻烦了所以写的 dp) 阅读全文
posted @ 2020-12-25 21:30 Kreap 阅读(80) 评论(0) 推荐(0) 编辑
摘要: Link Solution 和之前有道省选题很像,同样是用线段树来实现排序操作。但这道题不同之处在于值域很小,以致于每个数的个数可以直接分别用线段树统计出来,这正是这道题的突破口。后面的就很好想了,每次对一个区间排序只需要统计所有字母的出现次数,然后按顺序区间覆盖,易知复杂度是 \(O(n\log{ 阅读全文
posted @ 2020-12-25 20:39 Kreap 阅读(72) 评论(0) 推荐(0) 编辑
摘要: Link Solution 如果一个 \(k*k\) 的矩阵里放满了 \(k\) 个数,容易发现横坐标和纵坐标都是连续的,我们需要利用好这个性质,那么不妨按横坐标排序,之后只有相连的几个点会造成贡献。对于一个区间 \([l,r]\),如果它是合法的,当且仅当区间长度等于值域长度(由于合法时值域一定是 阅读全文
posted @ 2020-12-18 22:01 Kreap 阅读(95) 评论(0) 推荐(0) 编辑
摘要: Link Solution 要求字典序最小,那么前面的值要尽量小,那就不妨先考虑前面的值。两段有交部分的操作是很难处理的,肯定需要某种转换。所以想到观察两段有交的操作会产生什么样的效果。简单的分类讨论之后,会发现无论怎么操作都对前面的数没有正的贡献,反而有可能把前面的一段数变大。由于有交的操作一定不 阅读全文
posted @ 2020-12-18 16:50 Kreap 阅读(64) 评论(0) 推荐(0) 编辑
摘要: Link Solution 容易想到用 \(f_i\) 表示顶部圆环是 \(i\) 时的塔的最大高度。考虑如何转移,一个圆环 \(i\) 能放在另一个圆环 \(j\) 上,必有 \(b_i\leq b_j\),所以容易想到按照 \(b\) 降序排序,那么 \(f_i\) 只需要从 \(j \ (j< 阅读全文
posted @ 2020-12-12 16:41 Kreap 阅读(88) 评论(0) 推荐(0) 编辑
摘要: Link Solution 注意到每次排序的 是一个前缀。而若先排一个较短的前缀,之后又排一 个大点的前缀,那么显然这个小的会被覆盖,等价于没有排序。将所有这样的无用排序删除,最终会得到一个长度严格单调下降的操作序列(可以用单调栈维护)。考虑栈内相邻的两个操作,前缀长度分别为 \(x\)、\(y\) 阅读全文
posted @ 2020-12-12 14:38 Kreap 阅读(73) 评论(0) 推荐(0) 编辑
摘要: Link Solution 一个显然的做法是把一个点能到达的所有点连上边,然后缩点,形成一个 DAG,在 DAG 上统计能到达的点的个数,转换成可达性统计,用 bitset 随便维护一下就可以了。(大概能得 30 分?) 这个做法有两个问题,边的数量级是 \(O(n^2)\) 的,bitset 的空 阅读全文
posted @ 2020-12-12 11:04 Kreap 阅读(98) 评论(0) 推荐(0) 编辑
摘要: Link 按点来算贡献的话并不好算。考虑到路径长度和可以拆分成每条边的长度乘上其被经过的次数,所以统计边的贡献就可以了。树上一条边会将树分成两边,而该边被经过的次数实质上就是两边的白点个数之积加上黑点个数积。因为定了根,所以其中一边可以按子树考虑,于是就转换成了树形dp。 #include<stdi 阅读全文
posted @ 2020-12-12 10:28 Kreap 阅读(87) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 22 下一页