其他分享
首页 > 其他分享> > std for 近期刷的题

std for 近期刷的题

作者:互联网

CF592D Super M(2200)

\(\mathcal O(n)\) 暴力建虚树,答案即为 \((n-1)\times 2-mx\)(\(n\) 为虚树总点数,\(mx\) 为虚树直径),时间复杂度 \(\mathcal O(n)\)。

CF601B Lipshitz Sequence(2100)

易证,最大值只会出现在相邻两个数之间,不会跨过数。由于要求区间子段的答案,那么肯定不能暴枚,考虑维护一个数在多少子段内可作为最大值,可 fhq \(\mathcal O(n \log n)\) 维护,也可单调栈 \(\mathcal O(n)\) 维护。时间复杂度 \(\mathcal O(qn)\)。

CF601C Kleofáš and the n-thlon(2300)

设 \(f_{i,j}\) 表示前 \(i\) 项比赛中获得总分为 \(j\) 的期望人数。那么答案即为 \(1+\sum\limits_{i=1}^{sum-1}f_{n,i}\)(其中 \(sum\) 为所有 \(c_i\) 的总和)。转移方程显而易见:\(f_{i,j}=\frac{\sum\limits_{k=1}^{m}f_{i-1,j-k}(k \ne c_i)}{m-1}\)。转移时用前缀和优化。时间复杂度 \(\mathcal O(nm)\)。

CF1338A Powered Addition(1500)

如果这一个数比前一个大,就这么留着显然是最优的。如果这一个数比前一个小,我们二进制计算它至少需要几轮操作才能比前一个更大,取最大值即可,时间复杂度 \(\mathcal O(n \log n)\)。

CF1338B Edge Weight Assignment(1800)

考虑第一问,若树上所有叶子节点之间距离均为偶数,那么答案即为 \(1\),否则可用如下方法分配:在 \(1\) 号点为根的情况下,我们把到根节点距离为奇数的叶子节点称为奇点,类似定义偶点。若奇点的距离为 \(2k+1\),我们从上到下填入 \(2k\) 个 \(3\) 和一个 \(1\)。若偶点的距离为 \(2k\),我们从上到下填入 \(2k-1\) 个 \(3\) 和一个 \(2\),易知这样是正确的,故只需要 \(3\) 种颜色。

考虑第二问,如果若干个叶子节点父亲相同,这些节点所连边的权值也必须相同,否则随便填,一定可以满足,算一下每个点叶子儿子个数即可。

时间复杂度 \(\mathcal O(n)\)。

CF1338C Perfect Triples(2200)

找规律。

  1. \(a\) 的取值把序列分成了若干块,每一块内的 \(a\) 都是从 \(2^k\) 到 \(2^{k+1}-1\) 的连续整数。
  2. 同一块内,\(b\) 的取值可以递归构造。每次将大块分成四小块,分别取第 \(1,3,4,2\) 小的值。
  3. 同一块内,\(c\) 的取值可以递归构造。每次将大块分成四小块,分别取第 \(1,4,2,3\) 小的值。

CF842E Nikita and game(2800)

由于多条直径间定有相交部分,那么维护 \(s1,s2\) 分别表示相交部分左右的点。那么每次加点直径要么不变要么变大。如果不变,对应集合加点即可。如果变,清空对应集合,判断另一个集合的点,距离为新直径加入即可。易证复杂度正确。时间复杂度 \(\mathcal O(n \log n)\)。

AT4754 [ABC126F] XOR Matching(1770)

简单构造。首先若 \(k \ge 2^m\),无解。其次,由 \(0⊕1⊕\cdots ⊕ (2^m-1)=0\) 启发,按如下方法构造 \((0,1,2,\cdots,2^m-1)(不包括 \ k)\),\(k\),\((0,1,2,\cdots,2^m-1)(不包括 \ k)\),\(k\)。时间复杂度 \(\mathcal O(n)\)。

AT3884 [ARC090D] Number of Digits(2891)

分类讨论。

观察到 \(S \leq 10^8\),那么当 \(l < 10^7\) 时,\(r <= 23000000\),尺取即可。

当 \(l \ge 10^7\) 时,有 \(f(r)-f(l) \leq 1\),枚举区间长度 \(t\),假设 \(t\) 由 \(x\) 个数位 \(f(l)\) 的数和 \(y\) 个数位 \(f(l) + 1\) 的数组成,于是有:\(\begin{cases}x+y=t\\f(l)\times x+(f(l)+1)\times y=S\end{cases}\)。

整理得 \(f(l)\times t=S\)。然后枚举长度 \(t\)(\(t \leq \lfloor\frac{n}{8}\rfloor\)),分类讨论 \(f(r)-f(l)\) 的值即可。时间复杂度 \(\mathcal O(可过)\)。

CF770C Online Courses In BSU(1500)

如果必修课程在环内,则无解,否则有解,tarjan 判环加拓扑排序模拟即可。时间复杂度 \(\mathcal O(m)\)。

CF1421D Hexagons(1900)

暴力模拟到周围 \(6\) 点的最小花费,分类讨论即可。时间复杂度 \(\mathcal O(1)\)。

CF1421E Swedish Heroes(2700)

考虑到所有合法的分配方案都满足一个简单的性质:\(2 \times p+q \equiv 1 \pmod 3\)(其中 \(p\) 为 - 的个数,\(q\) 为 + 的个数)和至少存在一对相邻且符号相同的数。数学归纳易证。

由此,设 \(f_{i,j,0/1,0/1}\) 表示考虑了前 \(i\) 个数,\(2 \times p+q\equiv j \pmod 3\),第 \(i\) 个数的符号为 -+,否/是存在至少一对相邻且符号相同的数,的答案。

边界 \(f_{1,2,0,0}=-a_1\),\(f_{1,1,1,0}=a_1\)。

转移方程:

\[f_{i+1,(j+2)\pmod 3,0,t|(k==0)} \leftarrow f_{i,j,k,t}-a_{i+1}\\ f_{i+1,(j+2)\pmod 3,1,t|(k==1)} \leftarrow f_{i,j,k,t}+a_{i+1} \]

时间复杂度 \(\mathcal O(n)\)。

CF855E Salazar Slytherin's Locket(2200)

数位 dp 板子。模板 可看这。

先差分,再记 \(f_{i,j,k}\) 表示在 \(i\) 进制下有 \(j\) 位,并且每个数字出现次数的奇偶性是 \(k\) 的数的个数。

转移方程:\(f_{i,j,k}=\sum\limits_{m=0}^{i - 1}f_{i,j-1,k⊕2^{m}}\)。

时间复杂度 \(\mathcal O(\log_b(r)2^bb^2)\)。

CF711C Coloring Trees(1700)

记 \(f_{i,j,k}\) 表示前 \(i\) 个点,第 \(i\) 个点染为 \(j\),分成 \(k\) 段的最小花费。

转移方程:

时间复杂度 \(\mathcal O(nkm^2)\),可用 st 表优化到 \(\mathcal O(nkm\log m)\)。

CF710D Two Arithmetic Progressions(2500)

直接分治。

总时间复杂度 \(\mathcal O(可过)\)。

CF590C Three States(2200)

可以发现图只有一种情况:即可以找到一点与三个联通块相连。

那么对于每个点,bfs 计算它与三个联通块的距离之和,取最小值即可。

时间复杂度 \(\mathcal O(nm \alpha)\)。

CF1151F Sonya and Informatics(2300)

设有 \(m\) 个 \(0\),那么题意就是让 \(a[1,m]\) 均为 \(0\),\(a[m+1,n]\) 均为 \(1\)。

令 \(f_{i,j}\) 表示 \(i\) 个操作后,前 \(m\) 个数中有 \(j\) 个 \(0\) 的方案数,答案即为 \(\frac{f_{k,m}}{\sum\limits_{i=0}^{m}f_{k,i}}\),边界:\(f_{0,p}=1\),\(p\) 为原序列前 \(m\) 个数中 \(0\) 的个数。

对于 \(f_{i,j}\),考虑它是如何转移来的:

到这里差点结束了,总结:\(f_{i,j}=f_{i-1,j-1}\times (m-j+1)^2+f_{i-1,j+1}\times (j+1)(n-2m+j+1)+C_{m}^{2}+C_{n-m}^{2}+j(m-j)+(m-j)(n-2m+j)\)。

考虑到 \(k\leq 10^9\),经验告诉我们直接上矩阵快速幂,毕竟这转移无需判断。

\[\begin{bmatrix}c_0& b_1& 0 & 0&\cdots & 0\\ a_0 & c_1 & b_2 & 0&\cdots & 0\\ 0 & a_1 & c_2 & b_3 & \cdots & 0\\ 0&0&a_2&c_3&\cdots&0\\ 0&0&0&a_3&\cdots&0\\ \cdots&\cdots&\cdots&\cdots&\cdots&\cdots\\ 0&0&0&0&\cdots&c_m\end{bmatrix} \times \begin{bmatrix}f_{i-1,0}\\f_{i-1,1}\\f_{i-1,2}\\f_{i-1,3}\\f_{i-1,4}\\ \cdots \\f_{i-1,m}\end{bmatrix}=\begin{bmatrix}f_{i,0}\\f_{i,1}\\f_{i,2}\\f_{i,3}\\f_{i,4}\\ \cdots \\f_{i,m}\end{bmatrix} \]

其中 \(a_i=(m-i)^2\),\(b_i=i(n-2m+i)\),\(c_i=C_{m}^{2}+C_{n-m}^{2}+i(m-i)+(m-i)(n-2m+i)\)。

时间复杂度 \(\mathcal O(n^3\log k)\)。

标签:std,复杂度,个数,近期,times,cdots,2m,mathcal
来源: https://www.cnblogs.com/orzz/p/16217949.html