Codeforces Round #790 (Div. 4)

\(1676A - Lucky?\)

知识点:基础语法
分两次读入 \(3\) 个数,计算两次总和。如果两次总和都相等,则 \(OK\)

\(1676B - Equal Candies\)

知识点:简单模拟
读入同时判断是否所有元素相同并记录最小值。
如果所有元素相同,输出 \(0\) 。如果存在不同元素,再枚举一遍,\(ans += a[i] - minn\)

思维优化:在线读入,记录最小值 \(minn\) 。离线扫描,计算 \(ans += a[i] - minn\)

\(1676C - Most Similar Words\)

知识点:典型暴力
\(1 \leq i < j \leq n\) (一种典型的暴力思维)的二维形式。

\(n\) 个长度相同的字符串。字符串 \(a_{i}\)\(a_{j}\)\(p\) 位置上的 \(differnce\)\(a_{{i}_{p}} - a_{{j}_{p}}\)\(a_{i}\)\(a_{j}\)\(difference\) 为他们在 \(1 ... p\) 位置上 \(difference\) 的总和。希望找到一组 \(a_{i}\)\(a_{j}\) 有最小的 \(difference\) 满足 \(1 \leq i < j \leq n\)

显然需要开 \(a[N][n]\)\(N\) 个字符串,长度为 \(n\))维护下所有字符串。
然后 \(for\) 一下枚举 \(i < j\) 的组合,记录最小值即可。可在线操作。

\(1676D - X-Sum\)

知识点:暴力模拟
给一个棋盘,每个位置上有一个非负整数。选一个位置放皇后,希望得到攻击轨迹上所有数字之和的最大值。
棋盘的行列范围 \(1 \leq n\)\(1 \leq m\) 枚举每个 \(cell\) 的时间是 \(4 * 10e4\) 。计算轨迹上 \(cell\) 的时间是常数大小。

操作上两个 \(for\) 枚举 \(cell\) ,再考虑一下边界,用 \(4\)\(while\) 向四个方向求和。

\(1676E - Eating Queries\)

知识点:典型二分
\(n\) 个糖果,第 \(i\) 个糖果有 \(a_{i}\) 的含糖量。给 \(q\) 个询问,对于每个询问,需要回答出获得 \(m\) 的糖量最少需要消耗多少糖果。
从小到大排序,求前缀和,对于每个询问二分求糖果数量的最大值。

\(1676F - Longest Strike\)

知识点:哈希的典型思维 + 带权值的最大(小)值维护

\(n\) 个数,一个整数 \(k\) 。要求找到两个数 \(l\ r\) ,满足所有的 \(l \leq x \leq r\)\(x\) 至少出现 \(k\) 次。且 \(r - l\) 为最大。


由于对双指针不了解,第一反应是双指针。
但双指针是,在一段线性数据中,通过两个指针,最终割出一段最大权值区间。
本质是对 \(1 \leq i < j \leq n\) 暴力思维的优化。维护的是 \(a_i\ to\ a_j\) 的权值。
若要问,也是问最终 \(a_i\ to\ a_j\) 的权值或者此时 \(i\ j\) 的落位。

本题并不具备这个特性。\(l \leq x \leq r\) ,由于 \(x\) 是用于占位而无权值的,明显是在维护区间长度。


一个区间条件限制的直觉积累:
\(l \leq x \leq r\)直觉上应该知道: \(x\) 无权值,仅代表 \([l, r]\) 中的任意个一个元素。再度映射为: \([l, r]\) 中取出任意数据 \(x\)目的是为了用于限制区间条件。

哈希思维:哈希出有用数(满足限制的数)
\(x\) 的满足条件的要求是出现过至少 \(k\) 次,且只有这些数是有用的。
很显然的,我们只需要通过一次哈希,把所有潜在有用的 \(x\) 筛选出来。将筛选出来的 \(x\) 遍历,维护每段连续的 \(x\)\(r - l\)

将符合条件的 \(x\) ,称作是 \(good\) 的,哈希并记录下来。遍历这些 \(good\) 的数,维护最长连续的区间的两端点。

过程中通过所有连续区间长度 \(len\) 维护 \(maxl\) 。同时维护 \(lans\)\(rans\) 记录左右端点。

初始时 \(len = 0\) ,遍历 \(good\) 的数,\(len++\) 。若扫到数与上一位不连续,\(len = 0\)
此过程中 \(maxl\) 若能更新则 \(maxl = len\)\(rans = i,\ lans = i - maxl + 1\)

\(1676G - White-Black Balanced Subtrees\)

知识点:树形 \(DP\) 典型思维
给一颗树,所有节点涂色为 \(W\)\(B\) 分别代表白节点或黑节点。我们认为一颗子树是平衡的,若它的黑白节点个数相等。

现要求输出一颗树的所有平衡子树数量。

比较显然的 \(DP\) 做法,但是实现上需要积累一些经验。

\(1676H1 - Maximum Crossings (Easy Version)\)

典型暴力 + 逆序对基础理论

\(1 \leq i < j \leq n\) 型暴力。

观察出题目需要求逆序对。其实比较裸,关键在于了解逆序对的意义会更容易读懂题意。
对于所有 \(i\) 位置,需要找出有多少 \(a_{j} > a_{i}\)\(j < i\)

逆序对的暴力解法。对于所有 \(1 \leq i < j \leq n\) ,枚举 \(a_{i} \geq a_{j}\)

\(1676H2 - Maximum Crossings (Hard Version)\)

逆序对(\(BIT\ or\) 分治)

非常典型的逆序对,但是\(ACM\) 为标准的:典型初级 \(BIT\) 或者中级分治思维

逆序对的两种 \(log\) 的解法。

  1. 分治解法,归并排序解逆序对。
  2. 离散化,对权值开 \(BIT\)
posted @ 2022-09-05 22:11  03Goose  阅读(33)  评论(0)    收藏  举报