CF2020(Codeforces Round 976 (Div. 2))

CF2020

A. Find Minimum Operations

难度:红
转换进制,每一位上数字相加。

B. Brightness Begins

难度:橙
场上临时打了个表找规律。发现 \(n-\lfloor\sqrt{n}\rfloor=k\)。于是过了。

C. Bitwise Balancing

难度:橙-黄
对于每一位分类讨论。
场上分讨调了好久没出来,悲剧了qwq

D. Connect the Dots

难度:黄-绿
首先,直接用并查集维护会T飞。
先把操作记录下来,再遍历 \(1\sim n\) 传递操作,并查集维护一下就行了。

E. Expected Power

难度:绿
看见期望我就跑
考虑概率dp。
容易发现不管怎么异或,最终异或和的范围总会在 \([0,1023]\) 内。
定义 \(dp_{i,j}\) 为前 \(i\) 位中异或和为 \(j\) 的概率。
当不选 \(a_i\) 时,有
\(dp_{i,j}=dp_{i,j}+(1-p_i)*dp_{i-1,j}\)
选了 \(a_i\) 时,有
$ dp_{i,j}=dp_{i,j}+p_i*dp_{i-1,j\oplus a_i} $
注意到 \(dp_{i}\) 只由 \(dp_{i-1}\) 转移,所以可以省一维。

注:该代码不保证可过,我交的时候TLE了,后面加了快读快写才过的。

F. Count Leaves

难度:紫
这题实在想不到正解,被迫看solution了qaq

容易发现,叶子数量等于选择 \(d+1\) 个数 \(((a_0,a_1,...,a_d),\) 其中 \(a_d=n,a_i|a_{i+1}(i=0...d-1))\) 的方法数。
定义 \(g(n)=f(n,d),(d\) 已给定)。手推一下发现这是个积性函数,即当 \(p,q\) 互质时,有 \(g(p)*g(q)=g(p*q)\)
\(n\) 为某个素数 \(p\) 的非负整数幂次时(即 \(n=p^b\)),明显 \(a_0,a_1,...,a_d\) 可以写成 \(p_{b_0},p_{b_1},...,p_{b_d}=x(b_0\leq b_1\leq...\leq b_d=b)\)
于是有 \(g(n)=\tbinom{x+d}{d}\)

然后官方solution上说是受到 Meissel–Lehmer 算法(一种快速计算质数个数的算法)的启发搞了个dp。
当然关于这个算法的介绍也不用去看,OI-wiki上写的像一坨。

总之是搞了一个dp。令 \(dp(n,x)=\sum^n_{i=1,spf(i)\geq x}g(i)\),其中 \(spf(i)\) 表示 \(i\) 的最小质因子。
我猜看到这么大一串式子你会懵逼。讲的就是从 \(1..n\) 中选出满足其最小质因子大于等于 \(x\) 的数 \(i\),求 \(g(i)\) 的和。
于是这里有一大堆式子:

\[dp(n,p)=\left\{ \begin{array}{lcl} 0&&n=0\\ 1&&p>n\\ dp(n,p+1)&&p\ \rm{is\ not\ a\ prime}\\ \displaystyle\sum_{i=0\ to\ p^i\leq n}dp(\lfloor\frac{x}{p}\rfloor,p+1)f(p^{ik},d)&&\rm otherwise \end{array} \right. \]

手推过程略。
明显,\(g(n)=dp(n,2)\),于是可以求出答案。
时间复杂度 \(O(n^{\frac{2}{3}})\)

这里就先把官方代码贴上面吧(可读性极高),到时候再补自己的。

posted @   nagato__yuki  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示