首页 > 其他分享 >Codeforces Round 949 (Div. 2) 中文题解

Codeforces Round 949 (Div. 2) 中文题解

时间:2024-06-04 17:46:03浏览次数:29  
标签:le frac min 题解 949 路径 Codeforces ge text

A

对于一个特定的 \(x\),Piggy 总是会选择 \(p\) 使得 \(p\) 是质数,所以分数就是 \(x\) 的质因子个数。

容易发现至少有 \(t\) 个质因子的数是 \(2^t\)。最大的满足 \(2^t \le r\) 的整数 \(t\) 是 \(\left\lfloor\log_2 r\right\rfloor\)。

又因为 \(2l \le r\),所以 \(\log_2 l + 1 \le \log_2 r\),所以 \(\log_2 l < \left\lfloor\log_2 r\right\rfloor \le \log_2 r\),所以 \(l < 2^{\left\lfloor\log_2 r\right\rfloor} \le r\)。

所以答案就是 \(\left\lfloor\log_2 r\right\rfloor\)。

时间复杂度:每个测试用例 \(O(1)\) 或 \(O(\log r)\)。

B

答案的每一个二进制位互相独立,所以可以分别计算答案在每个二进制位的取值。

设当前在考虑第 \(d\) 个二进制位,那么 \(a_i = \left\lfloor\frac{i}{2^d}\right\rfloor \bmod 2\)。

每过一秒,一个 \(1\) 会往左边和右边“扩散”\(1\) 格。

如果 \(a_n\) 一开始就是 \(1\) 那么答案的这一位就是 \(1\)。

否则 \(a_n\) 处于一个 \(0\) 的连续段中,我们需要计算这个连续段左边的 \(1\) 和右边的 \(1\) 能否“扩散”到 \(a_n\)。设 \(x = n \bmod 2^{d + 1}\),那么 \(0 \le x \le 2^d - 1\)。左边的 \(1\) 扩散到 \(a_n\) 需要 \(x + 1\) 秒,右边的 \(1\) 扩散到 \(a_n\) 需要 \(2^d - x\) 秒。所以若 \(\min(x + 1, 2^d - x) \le m\) 那么 \(a_n\) 就能变成 \(1\)。特别地,若 \(n < 2^d\) 那么左边没有 \(1\),所以这种情况若 \(2^d - x \le m\) 那么 \(a_n\) 就能变成 \(1\)。

时间复杂度:每个测试用例 \(O(\log (n + m))\)。

C

特判全是 \(-1\) 的情况。

考虑把所有值不是 \(-1\) 的位置提取出来,设其为 \(c_1, c_2, \ldots, c_k\)。\([1, c_1 - 1]\) 和 \([c_k + 1, n]\) 的 \(-1\) 是好处理的,不断乘 \(2\) 除 \(2\) 即可。容易发现 \([c_1 + 1, c_2 - 1], [c_2 + 1, c_3 - 1], \ldots, [c_{k - 1} + 1, c_k - 1]\) 的构造互相独立,所以我们现在只考虑解决 \(a'_1 \ne -1, a'_n \ne -1\) 且 \(a'_2 = a'_3 = \cdots = a'_{n - 1} = -1\) 的问题。

容易发现若 \(a_i\) 确定,那么 \(a_{i + 1}\) 只可能是 \(\left\lfloor\frac{a_i}{2}\right\rfloor, 2a_i, 2a_i + 1\) 其一。

发现 \(a_i \to a_{i + 1}\) 实质是在满二叉树上走了一条边。因此问题被转化成求一条满二叉树上给定起点 \(a'_1\)、终点 \(a'_n\) 和经过的点数 \(n\) 的路径。例如 \(a' = [3, -1, -1, -1, 9]\) 就相当于是找到 \(3 \to 9\) 在满二叉树上的一条经过点数为 \(5\)​ 的路径:

考虑先求出 \(a'_1 \to a'_n\) 在满二叉树上的最短路(可以先求出两点的 LCA,最短路就是 \(a'_1 \to \text{LCA}(a'_1, a'_n) \to a'_n\)),设其经过的点数为 \(l\),那么无解当且仅当 \(l > n\) 或 \(l\) 和 \(n\) 的奇偶性不同。否则我们先把 \(a'_1, a'_2, \ldots, a'_l\) 填上求出来的最短路,然后在 \(a'_n\) 和 \(2a'_n\) 反复横跳即可。

时间复杂度:每个测试用例 \(O(n)\) 或 \(O(n \log V)\)。

D

\(a_i \cdot a_{i + 1} = a_j \cdot a_{j + 1}\) 的必要条件是无序对 \((a_i, a_{i + 1})\) 和无序对 \((a_j, a_{j + 1})\) 相同。事实上,若 \(a_i\) 都取质数,那么这个必要条件就会变成充要条件。

如果我们把 \((a_i, a_{i + 1})\) 看成一条边,那么问题变成找到点数最少的无向完全图(每个点还有一个自环),使得这个完全图存在一条经过 \(n - 1\) 条边且不经过重复边的路径。

考虑若完全图点数确定,我们如何计算这个完全图的最长不经过重复边的路径长度。

设完全图点数为 \(m\),若 \(m\) 是奇数那么每个点的度数都是偶数,所以这个图存在欧拉路径,路径长度即为边数,其等于 \(\frac{m(m + 1)}{2}\)。

若 \(m\) 是偶数那么每个点的度数都是奇数,我们需要删除一些边使得这个图存在欧拉路径。容易发现一条边最多使奇度数点的数量减少 \(2\),所以我们至少需要删除 \(\frac{m}{2} - 1\) 条边,删除 \((2, 3), (4, 5), \ldots, (m - 2, m - 1)\) 这些边即可,路径长度为 \(\frac{m(m - 1)}{2} - \frac{m}{2} + 1 + m = \frac{m^2}{2} + 1\)。

当 \(n = 10^6\) 时最小的 \(m\) 是 \(1415\),第 \(1415\) 小的质数是 \(11807\),符合 \(a_i \le 3 \cdot 10^5\)。

我们可以二分求出最小的 \(m\),使用 Fleury 算法求出一个无向图的欧拉路径。

时间复杂度:每个测试用例 \(O(n)\)。

E

发现对于三条两两相交的线段 \((l_1, r_1, a_1), (l_2, r_2, a_2), (l_3, r_3, a_3)\)(不妨设 \(a_1 \le a_2 \le a_3\)),只用保留 \((1, 2), (2, 3)\) 之间的边,因为 \(a_3 - a_1 = a_2 - a_1 + a_3 - a_2\),而且对于一个图的每个环,其中边权最大的边一定不会出现在最小生成树上。

由此,考虑这样的一个扫描线流程:每条线段在 \(l\) 处加入,在 \(r\) 处删除;加入一条线段时找到它按 \(a\) 排序后的前驱后继连边。实际上是维护每个时刻存在的所有线段按 \(a\) 排序后连成的一条链。

容易发现做完扫描线后边数缩减到了 \(O(n)\),那么直接求最小生成树就行了。

时间复杂度:每个测试用例 \(O(n \log n)\)。

F

考虑 dp。设 \(f_{u, i}\) 为 \(u\) 子树内延伸上去的路径,钦定这条路径不包含 \(i\) 这个值,\(u\) 子树内除了这条路径的路径 MEX 和的最小值。\(i\) 的取值在 \([1, n + 1]\)。这样我们可以直接将这条路径的 MEX 当作 \(i\),因为若 MEX 不是 \(i\) 那么 MEX 会更小,这个 dp 状态就不优。

考虑 dp 的所有转移:

  1. \(u\) 是叶子,则有:

\[f_{u,i}=\begin{cases} 0, & i \neq a_u \\ +\infty, & i=a_u \end{cases} \]

  1. \(u\) 只有一个儿子,不妨设儿子为 \(x\)。令 \(\text{minx}=\min\limits_{i\neq a_u}{f_{x,i}+i}\),则有:

\[f_{u,i}=\begin{cases} \min(f_{x,i},\text{minx}), & i \neq a_u \\ +\infty, & i=a_u \end{cases} \]

  1. \(u\) 有两个儿子,不妨设两个儿子为 \(x,y\)。令 \(\text{minx}=\min\limits_{i\neq a_u}{f_{x,i}+i},\text{miny}=\min\limits_{i\neq a_u}{f_{y,i}+i}\),则有四种转移方式:
  • 延续 \(x\) 子树中的路径,即 \(\forall i\neq a_u,f_{u,i}=\min(f_{u,i},f_{x,i}+\text{miny})\)
  • 延续 \(y\) 子树中的路径,即 \(\forall i\neq a_u,f_{u,i}=\min(f_{u,i},f_{y,i}+\text{minx})\)
  • 新建一个路径,并将两个子树中的路径拼接起来,即 \(\forall i\neq a_u,f_{u,i}=\min(f_{u,i},\min\limits_{j \neq a_u}{(f_{x,j}+f_{y,j}+j)})\)
  • 新建一个路径,并且不拼接两个子树中的路径,即 \(\forall i\neq a_u,f_{u,i}=\min(f_{u,i},\text{minx} + \text{miny})\)

令 \(k=\min(\min\limits_{i \neq a_u}{(f_{x,i}+f_{y,i}+i),\text{minx} + \text{miny}})\),则可以将转移写成如下形式:

\[f_{u,i}=\begin{cases} \min(f_{x,i}+\text{miny},f_{y,i}+\text{minx},k), & i \neq a_u \\ +\infty, & i=a_u \end{cases} \]

这样时间复杂度是 \(O(n^2)\) 的。

事实上可以证明我们只需要考虑不超过 \(O(\frac{n}{\ln n})\) 的 MEX(在 \(n = 25000\) 时只需要考虑不超过 \(3863\) 的 MEX),因此 dp 第二维只用枚举到 \(O(\frac{n}{\ln n})\)(或 \(3863\))。

并且我们有一个能达到 \(O(\frac{n}{\ln n})\) 的 MEX 的一条链的构造,就是从 \(1\) 开始枚举 \(i\),把 \(i\) 的因数倒序列举出来,比如 \([1, 2, 1, 3, 1, 4, 2, 1, 5, 1]\)。

时间复杂度:每个测试用例 \(O(\frac{n^2}{\ln n})\)。

关于 MEX 上界的证明:

只考虑链的情况。对于一个固定的 \(x\),形如 \([a, \ldots, b, x, c, \ldots, d, x, e, \ldots, f, x, g, \ldots, h]\) 的序列,可以把它分成这样的段:

\[[a, \ldots, b], [b, x, c], [c, \ldots, d], [d, x, e], [e, \ldots, f], [f, x, g], [g, \ldots, h] \]

其中不含 \(x\) 的段的 \(\text{MEX} \le x\),含 \(x\) 的段的 \(\text{MEX} \le 4\)。

设答案为 \(t\),那么 \(t\) 满足:(其中 \(c_i\) 为 \(i\) 的出现次数)

\[\min\limits_{i \ge 1} (c_i + 1) i + 4 c_i \ge t \]

放缩,得:

\[\min\limits_{i \ge 1} (c_i + 1) (i + 4) \ge t \]

进一步地,形如 \([b, x, c]\) 的段,若 \(x \ge 4\),那么上面的 \(4c_i\) 可以变成 \(3c_i\)(因为 \(x\) 不可能为 \(1, 2, 3\)),所以得:

\[\min(\min\limits_{i = 1}^3 (c_i + 1)(i + 4), \min\limits_{i \ge 4}(c_i + 1)(i + 3)) \ge t \]

那么:

\[c_i \ge \begin{cases} \left\lceil\frac{t}{i + 4}\right\rceil - 1 & 1 \le i \le 3 \\ \left\lceil\frac{t}{i + 3}\right\rceil - 1 & i \ge 4 \end{cases} \]

也就是说我们需要 \(O(\frac{t}{i})\) 个 \(i\),那么 \(n = O(t \ln t)\),所以 \(t = O(\frac{n}{\ln n})\)。

我们还有:

\[n = \sum\limits_{i \ge 1} c_i \ge \sum\limits_{i = 1}^3 (\left\lceil\frac{t}{i + 4}\right\rceil - 1) + \sum\limits_{i \ge 4} (\left\lceil\frac{t}{i + 3}\right\rceil - 1) \]

\(n\) 固定时可以二分出最大的满足上面条件的 \(t\),得到 \(n = 25000\) 时 \(t = 3863\)。

标签:le,frac,min,题解,949,路径,Codeforces,ge,text
From: https://www.cnblogs.com/zltzlt-blog/p/18231373

相关文章

  • gpt4free软件的 g4f gui 网页速度非常慢的问题解决
    问题:g4f gui启动网页很难连上gpt4free是一个为大众提供的Openai等大模型API调用服务的软件,但是在装好启动g4f gui,使用8080端口连接后,发现网页一直在执行,半天还没好。怀疑是网页里面的一些js加载有问题。通过在python命令行使用importg4f;g4f.version命令来找到g4f的......
  • MySQL数据库:Lock wait timeout exceeded; try restarting transaction问题解析及解决方
    MySQL数据库:Lockwaittimeoutexceeded;tryrestartingtransaction问题解析及解决方案一、背景描述二、原因分析三、解决方案3.1方案一事务信息查询3.2方案二如果杀掉线程依然不能解决,可以查找执行线程耗时比较久的任务,kill掉3.3方案三innodb_lock_wait_timeout锁定等......
  • 【数据分享】中国民政统计年鉴(1949-2022)
    大家好!今天我要向大家介绍一份重要的中国民政统计数据资源——《中国民政统计年鉴》。这份年鉴涵盖了从1949年到2022年中国民政统计全面数据,并提供限时免费下载。(无需分享朋友圈即可获取)数据介绍从1949年到2022年,每年的《中国民政统计年鉴》不仅是数据记录的集合,更是我国社会......
  • (第25天)【leetcode题解】二叉树的层序遍历
    目录429、N叉树的层序遍历题目描述思路代码515、在每个树行中找最大值题目描述思路代码116、填充每个节点的下一个右侧节点指针题目描述思路代码117、填充每个节点的下一个右侧节点指针II题目描述思路代码104、二叉树的最大深度题目描述思路代码111、二叉树的最小深......
  • 2009年408真题解析
    2009年408真题解析【2009.1】为解决计算机主机与打印机之间速度不匹配问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是。A.栈B.队列C.树D.图【知识点】栈和队列特点及应用。【答案】B......
  • Codeforces Round 950 (Div. 3)
    https://codeforces.com/contest/1980A.ProblemGenerator题意:Thereisgoingtobemroundsnextmouth,eachofthemonthshouldbeconsistof"ABCDEFG",countthenumebrofalphabetweshouldaddtosatisfythisrequirementunderagivingsequenc......
  • P10536 [Opoi 2024] 二十六点 题解
    比较直接的做法。当\(P_x=1\)时显然可以暴力DP,设\(f_{x,c}\)表示\(x\)的子树中以\(c\)开头的最长不下降子序列的长度。直接转移即可。\(P_x\neq1\)的时候呢?我们发现,所谓“忽略掉这些路径中的第\(2\)到第\(P_x\)个的点”,代表的就是按照深度转移,大概就是这样:......
  • CF960G Bandit Blues 题解
    我不会斯特林数。CF960GBanditBlues给你三个正整数\(n\),\(a\),\(b\),定义\(A\)为一个排列中是前缀最大值的数的个数,定义\(B\)为一个排列中是后缀最大值的数的个数,求长度为\(n\)的排列中满足\(A=a\)且\(B=b\)的排列个数。\(n\le10^5\),答案对\(998244353\)取......
  • P10550 [THUPC2024] 贸易 题解
    正式场上拿了这题的首\(A\),让队伍不至于无奖而返。思路容易发现题目的买入卖出过程形似一个括号匹配。那么我们可以对每一种类型的物品做括号匹配。若是一个匹配的括号在询问区间内则可以记入答案。就变成了一个二维数点问题。离线树状树组即可。Code#include<bits/stdc......
  • 关于vue关闭页面时去除定时器失效问题解决
    1.先去除页面缓存,这个在路由部分 2.    ......