7-8 贪心专题2

posted on 2025-07-08 13:42:25 | under | source

别逮着 wzr 一个人薅啊。比昨天简单很多。

AGC016E

link

小清新题。找充要条件。

先考察一只美味烧鸡 \(x\) 存活条件,按时间轴从晚往早找到第一条决策 \(t\) 时刻 \((x,y)\),必须让 \(y\) 活下来然后吃掉,那么 \(1\dots t-1\) 时刻的充要条件变为 \(x,y\) 同时存活。以此类推。

推广一下,当前推到第 \(t\) 时刻,\(x\) 存活的充要条件为前 \(t\) 时刻 \(S_x\) 内的美味烧鸡都存活。那么 \(t-1\) 时刻的决策 \((a,b)\),若 \(a,b\notin S_{x,t}\) 那么啥事没有,若其一 \(\in S_{x,t}\) 就将另一个也加入集合,否则产生矛盾 \(x\) 活不了。

接下来考虑两只美味烧鸡 \(x,y\) 同时存活。假如 \(S_x,S_y\) 有交,取其一 \(k\),令 \(k\) 先加入 \(S_x\) 后加入 \(S_y\),那么考虑使 \(k\) 加入 \(S_y\) 的决策 \((p,k)\),则此时 \(p,k\in S_y,k\in S_x\),按照定义 \(p,k\) 都不能吃掉,矛盾。反之,无交显然不会互相干扰,所以都能活。

直接暴力 \(O(nm)\) 得到 \(S\),暴力枚举 \(S_x,S_y\) 是否存活 \(O(n^3)\)

submission

CF1446D2

link

众数与子区间的结论 + 根号分治。让讲题人无地自容的题。

\(x\) 为整个序列的众数。考虑子区间 \([l,r]\)\(x\) 不为其众数,记 \(y\) 为众数其一。将 \([l,r]\) 拓展,由于初始 \(cnt_y>cnt_x\) 且最终 \(cnt_y\le cnt_x\),因此拓展时必然存在 \(cnt_x=cnt_y\)。对于 \(x\) 不为众数的区间不断做此拓展操作,无法拓展时即为整个区间。

因此,只需找出最大的满足存在 \(y\) 使得 \(cnt_x=cnt_y\) 的区间。受 \(D1\) 值域较小的启发,考虑根号分治。对于出现次数 \(\ge \sqrt n\) 的数直接枚举,\(O(n^{\frac 32})\)

对于出现次数 \(< \sqrt n\) 的数,枚举出现次数 \(k\),那么双指针扫描即可。也是 \(O(n^{\frac 32})\)

实测块长设为 \(1000\) 直接暴毙,设为 \(500\) 跑得飞快。

submission

CF1753E

link

观察 + 贪心 + 二分。对于这种算算式状物有时候可以考虑乘法分配律分析。不要排斥暴搜,在一定约束条件下也会有优秀复杂度。

题目说结果 \(\le 2\times 10^9\),所以乘法操作(忽略 \(\times 1\))至多 \(30\) 个。

然后贪心地想,移动乘法肯定放最后面,移动加法肯定放最前面。我们先确定乘法,再来搞加法。

考虑大力暴搜!然鹅肯定会暴毙。注意到对于相同元素,显然优先移动前面的,也就是枚举分界线即可。这样子复杂度就大大降低,相当于满足 \(\prod x_i^{p_i}\le 2\times 10^9\) 下最大化 \(\prod (p_i+1)\),算得最大 \(4608\)

考虑加法,将一个加法 \(+t\) 往前移动,设路径上的乘法之积为 \(X\),答案便增大 \((X-1)t\)。那么取贡献前 \(k\) 大即可。

然鹅会超时。注意到乘法很少,每个加法对应的 \(X\) 是一段段的。那么提前将每段排序,就相当于对 \(\log\) 段有序序列取前 \(k\) 大。二分找到第 \(k\) 大,同时内层需要套一个二分,是 \(\log^3\) 级别的。需要注意第 \(k\) 大可能有多个,解决方法是改二分为找最小的 \(p\) 使得贡献 \(\ge p\) 的元素 \(\le k\),然后答案再加上 \((k-cnt)(p-1)\)。你只能用贡献,因为对于 \(k-cnt\) 这部分不好得知原来的值是多少。

submission

CF1592F1

link

显然操作二三都能被两次操作一替代,不用管。

接下来肯定要差分转化一下,但是正常差分不太方便,是操作一改四个点、操作四改单点。由于操作一花费一,所以把差分翻转一下(\(c_{i,j}=a_{i,j}\oplus a_{i+1,j}\oplus a_{i,j+1}\oplus a_{i+1,j+1}\)),就变成操作一改单点,操作四改四个点。

注意到两个操作四 \(c_{n,m}\) 被抵消,只改了 \(6\) 个点,可以用操作一替代。至多一个操作四,那么直接枚举操作四计算答案即可。\(O(nm)\)

submission

CF1592F2(缺代码)

link

承接 F1 做法。不同的是操作四花费为 \(2\)

继续发掘性质,注意到若两个操作四的顶点横或纵坐标相等,则被抵消不如用四次操作一。因此操作四横纵坐标均满足互不相同。

那么每个操作四相对独立(除 \(c_{n,m}\) 外不会重合)。注意到若一次操作四除 \(c_{n,m}\) 外的点有一个是 \(0\),那么就必须再用至少一次操作一来修正,代价至少为 \(1+2=3\)。那我不如全用操作一。

所以操作四的条件为左上三个顶点均为 \(1\),同时肯定能用就尽量用,相当于最大匹配,直接匈牙利 \(O((n+m)nm)\)

submission

CF1566F(缺代码)

link

最 EZ 的一题。

经典:大区间包含小区间只保留小区间。所以区间左右端点递增。

然后考虑一个点,必然是往一个方向走一段再转头走到另一个方向,相当于左右位移距离 \((x,y)\),然后给 \(x,y\) 分配系数 \(1,2\)

然后显然每个点的位移范围不会重合。那么考虑相邻两个点,就选一个分界点左右分别归两个点覆盖。那大力 dp 记 \(f_{i,1/2}\) 表示考虑前 \(i\) 个点,第 \(i\) 个点右边系数为 \(1/2\),就做完了。排序 \(O(n\log n)\)

submission

posted @ 2026-01-13 11:37  Zwi  阅读(0)  评论(0)    收藏  举报