首页 > 其他分享 >CF 随机做题

CF 随机做题

时间:2023-11-02 20:12:56浏览次数:27  
标签:覆盖住 max px CF ge 随机 端点 集合

CF1884

2C

假设咱们钦定在 \(x\) 处取到最大值,则对于任意线段 \(i\),若 \(i\) 覆盖点 \(x\),则选中她会使得 \(\max a \leftarrow \max a + 1\),\(\min a \leftarrow \min a + y\),\(y \in \{0, 1\}\),则对答案产生 \(\ge 0\) 的贡献,故此时必然将所有线段 \(i\) 均选中。

接下来咱们考虑在确定最大值于 \(x\) 处取到后,此时被覆盖次数最少的点在何处取到:令 \(f_i\) 表示点 \(i\) 被多少个线段覆盖,则可知 \(f\) 随 \(i\) 先单调不降再单调不升(证明:在 \(x\) 前,每经过一个左端点则 \(f_i \leftarrow f_{i - 1} + 1\);在 \(x\) 后,每经过一个右端点则 \(f_i \leftarrow f_{i - 1} - 1\)),故此时最小值必然于 \(1\) 或 \(m\) 处取到。

覆盖 \(1\) 的线段个数 \(= \#\{i | l_i = 1\}\),覆盖 \(m\) 的线段个数 \(= \#\{i | r_i = m\}\),扫描线维护即可。

2D

直接求数对 \((i, j)\) 的个数不是很好求,考虑反过来,求不满足条件的数对 \((i, j)\) 的个数,此时存在 \(k\),使得 \(a_k | a_i\) 且 \(a_k | a_j\),即 \(a_k | \gcd(a_i, a_j)\)。

咱们令 \(f_x\) 表示满足 \(\gcd(a_i, a_j) = x\) 的数对 \((i, j)\) 个数,\(c_x\) 表示数列 \(\{a_i\}\) 中 \(x\) 出现的个数,则有:

\[\binom{\sum_{p \in \mathrm{N}, px \le \max a} c_{px}}{2} = \sum_{p \in \mathrm{N}, px \le \max a} f_{px} \]

因此咱们有:

\[f_x = \binom{\sum_{p \in \mathrm{N}, px \le \max a} c_{px}}{2} - \sum_{p \in \mathrm{N}, p > 1, px \le \max a} f_{px} \]

咱们记集合 \(S\) 为 \(a_k\) 的倍数集合,答案为 \(\binom{n}{2} - \sum_{i \in S} f_i\),单次转移 \(O(\frac{\max a}{x})\),总复杂度 \(O(\max a \log \max a)\),\(n \ge \max a\)。

CF1886

2C

咱们假设钦定 \(s\) 前 \(i\) 位保留,删除第 \(i + 1\) 位,假设存在一个 \(j < i + 1\),使得 \(c_j > c_{j + 1}\),则删除 \(j\) 比删除 \(i + 1\) 优,故必然在第一个 \(i\) 满足 \(s_i > s_{i + 1}\) 的位置删除,链表维护第 \(i\) 个点的前后继即可。

2D

考虑倒着做 \(s\) 的构造,对于 \(\texttt{>}\) 相当于移除 \(s\) 中的最大元素,\(\texttt{<}\) 相当于移除 \(s\) 中的最小元素,\(\texttt{?}\) 相当于移除 \(s\) 中非最大也非最小的数。对于 \(s_i\),其中共有 \(i + 1\) 个元素,故最终答案即为 \(\prod_{s_i = \texttt{?}} (i - 1)\)。

2E

「CSP 2019 划分」的精神赓续!

形式化题意:给定序列 \(a\),要求用 \(m\) 个集合覆盖序列的元素,使得每个集合至少覆盖住一个元素,且这些集合两两无交,并且对于每个集合 \(S_i\),其所覆盖住的每个元素 \(a_k\) 都有:\(a_k \ge \frac{b_i}{|S_i|}\)。

首先咱们对序列 \(a\) 做有序化处理,使得其单调不增,即始终有 \(a_i \ge a_{i + 1}\),咱们假设对于集合 \(S_i\),其覆盖住的最小元素为 \(a_{j_0}\),其覆盖住的所有元素为 \(\{a_{j_0}, a_{j_1}, \cdots, a_{j_{p - 1}}\}\),对于 \(a_{j_0 + q}, q \in [1, p - 1]\),若覆盖住它的集合为 \(S_r\),则将 \(a_{j_0 + q}\) 移入 \(S_i\),将 \(a_{j_q}\) 移入 \(S_r\),显然 \(a_{j_q} \ge a_{j_0 + q}\),则移动后 \(|S_i|\) 与 \(|S_r|\) 均不变,显然 \(S_r\) 仍满足条件,又因为 \(a_{j_0 + q} \ge a_{j_0} \ge \frac{b_i}{|S_i|}\),故 \(S_i\) 亦满足条件,咱们立即得出推论:必然存在一个解,其每个集合均覆盖住一段区间。

接下来咱们注意到:假设集合 \(S'\) 是所有集合中所覆盖住的区间左端点最小的集合,若其左端点不为 \(1\),则将 \(1\) 到 \(S'\) 左端点的元素全部并入 \(S'\),此时 \(|S'|\) 增大,故 \(\frac{b'}{|S'|}\) 减小,则此时 \(S'\) 仍满足条件,故咱们又得到一个推论:必然存在一个解,其最左端的区间(集合)的左端点为 \(1\)。

咱们又注意到,上述的推论自然地带有数学归纳的特征,因为将最左端的区间所覆盖住的元素从原序列中移除后,就形成了一个新的序列,且移除的元素不对后续产生任何约束,则由数学归纳法立即得出:\(S_1 = [1, r_1], S_2 = [r_1 + 1, r_2], S_3 = [r_2 + 1, r_3], \cdots, S_t = [r_{t - 1} + 1, r_t]\),此时问题转化为:构造序列 \(\{r_1, r_2, \cdots, r_t\}\),其严格单调增,且 \(r_1 \ge 1, r_t \le n\),并满足条件:\(\forall i \in [1, t], a_{r_i} \ge \frac{b_i}{r_i - r_{i - 1}}\)(\(r_0 = 0\))。

现在咱们可以记 \(f_{i, S} \in \{0, 1\}\) 表示已经处理了前 \(i\) 个 \(a\) 的元素,目前已经完成对集合 \(S\) 中的所有集合的分配(均分配了一个 \([1, i]\) 的子区间),并且 \(i\) 作为其中一个集合的右端点时能否对 \(S\) 中的所有集合完成其对应的 \(r\) 的构造,很显然有转移:\(f_{i, S} \rightarrow f_{j, S \cup \{k\}}, k \notin S, a_{j} \ge \frac{b_k}{j - i}\)。

但是这个东西非常蠢!咱们考虑经典值域定义域互换:咱们注意到,如果对于所有可行构造 \(\{r_1, r_2, \cdots, r_t\}\) 中 \(r_1\) 的最小值为 \(r_1'\),则将任意一个可行构造中的 \(r_1\) 换成 \(r_1'\) 后构造仍可行。故咱们直接令 \(f_S\) 表示对 \(S\) 中的所有集合均分配完其对应的 \(r\),此时 \(S\) 中的所有集合所覆盖的元素形成的前缀长度的最小值,考虑 \(f_S\) 如何转移:令 \(R(i, j)\) 表示令 \(i\) 作为第 \(j\) 个集合所覆盖区间的左端点,其最小的右端点 \(r\),则有:

\[f_S = \min_{k \in S} R(f_{S - \{k\}} + 1, k) \]

有解当且仅当 \(f_U \le n\),\(U = [1, n]\),\(r\) 的构造也可以直接根据 \(f\) 的转移得出,同时 \(R\) 可以利用其在 \(j\) 确定时的不降性将复杂度均摊掉,\(O(nm + m2^m)\)。

标签:覆盖住,max,px,CF,ge,随机,端点,集合
From: https://www.cnblogs.com/Reimu-Hakurei/p/17806186.html

相关文章

  • CF1868B2 Candy Party (Hard Version) 题解
    Problem-1868B2-CodeforcesCandyParty(HardVersion)-洛谷相信大家已经看过SimpleVersion,这题和上题不同之处就在于如果\(b_i=2^x\),他可以被分解成\(2^x\)或\(2^{x+1}-2^x\),我们不妨起初固定一种方案,如果不满足条件后再把一部分换回去。我们强制钦定起......
  • CF227A Where do I Turn? 题解
    题目大意:\(A\),\(B\)在一条直线上。\(B\),\(C\)在一条直线上你从\(A\)走到了\(B\)去\(C\),问现在应该是直走、左转、还是右转。思路:分类讨论:分别求\(A\)到\(B\),\(B\)到\(C\)是什么方向,然后可得\(A\)到\(C\)的方向。Code:#include<bits/stdc++.h>usingnamesp......
  • CF333B题解
    分析发现只能跳\(n-1\)次,所以每个点一定是畅通无阻地抵达终点,所以有障碍的行和列放不了,并且每一个行或列最多放一个。因为同时跳,思考会不会跳到一起,发现如果不在正中间可以将起点放到另一头就不会跳到一起,如果在正中间就一定会跳到一起,所以正中间的行和列加一起最多只能放......
  • CF333A题解
    分析被除数一定,除数越小,商越大,所以选择合法的最小\(3_{x}\)。枚举指数即可,复杂度\(\mathcal{O(\log_{3}w)}\),\(w\)为值域\(1e18\),可以通过本题。代码#include<iostream>#defineintlonglongusingnamespacestd;constexprintMAXN(1000007);intf[MAXN];int......
  • CF1868B1 Candy Party (Easy Version) 题解
    Problem-1868B1-CodeforcesCandyParty(EasyVersion)-洛谷喵喵题。首先每个数最终肯定变成\(\overlinea\),如果\(\overlinea\)不是整数显然无解。然后记\(b_i=a_i-\overlinea\)表示每个数的偏差量,那\(b_i\)要满足能写成\(2^x-2^y\)的形式然后只需要......
  • CF743C Vladik and fractions
    大胆拆开,变成两个\(\frac{1}{n}\),令\(z=n\),那么\(\frac{1}{x}+\frac{1}{y}=\frac{x+y}{xy}=\frac{1}{n}\)。注意到分母是乘积,分子是和,可以令\(x,y\)的单位为\(n\)。设\(x=kn\),那么\(x+y=\frac{xy}{n}\),\(kn^2+yn=kny\),\(kn+y=ky\),\(y=\frac{kn}{k-1}\)。取\(k=n+1\......
  • 产学研融合聚焦技术难点,2023年度“CCF-蚂蚁绿色计算&隐私计算专项科研基金”正式发布
    10月26日,第二十届中国计算机大会(CNCC2023)于沈阳举行,以“发展数字基础设施,支撑数字中国建设”为主题,邀请产业界及学术界各方代表参会并开展分享与交流。大会期间,2023年度CCF-蚂蚁绿色计算专项科研基金与CCF-蚂蚁隐私计算专项科研基金于蚂蚁集团主办的“CCF-蚂蚁科研基金及产学研合......
  • python实现定时器产生随机数
    【精选】python实现定时器_python定时器-CSDN博客参考的这位博主的python定时器题目长这样:编写一个程序从1~20里随机产生3个数每过5秒加一次,连续加三次后输出结果,下面是代码#-*-coding:utf-8-*-importthreadingimporttimeimportrandomcancel_tmr=Falsecount=0......
  • 10.30 CF1685 题解
    10.30CF1685A.CircularLocalMiniMax题意给你\(n\)个整数$a_1,a_2,\ldots,a_n$。问有没有可能将它们排列在一个圆上,使每个数字严格地大于其相邻的两个数字或严格地小于其相邻的两个数字?题解直接排序然后按照\(1,4,2,5,3,6\)的规律放,check一下合不合法就行了。......
  • 「Note」CF 杂题集 6
    前言难度:CF2600-2700(有一道是2500)别问我为啥没有1到5。\(\color{blueviolet}{CF1473F}\)此题是坏题,他卡你空间。每一个元素有选或不选两种状态,并且有依赖项,元素的贡献有正负,数据范围不大,可以自然联系到最大权闭合子图,采用最小割模型。建模方式如下:对于一个正权点\(u......