ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

std for 近期刷的题

2022-05-03 11:32:51  阅读:163  来源: 互联网

标签:std 复杂度 个数 近期 times cdots 2m mathcal


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\) 段的最小花费。

转移方程:

  • 第 \(i\) 个点已被染色:\(f_{i,col_i,k}=\min(f_{i,col_i,k},f_{i-1,lst,k-(lst==col_i?0:1)})\)。
  • 第 \(i\) 个点未被染色:\(f_{i,j,k}=\min(f_{i,j,k},f_{i-1,lst,k-(lst==j?0:1)}+cost_{i,j})\)。

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

CF710D Two Arithmetic Progressions(2500)

直接分治。

  • 若 \(\max(a1,a2) < 10^3\),枚举 \(x \in [l,l+a1\times a2]\),对于符合条件的,答案累加 \(\lfloor\frac{r-x}{a1\times a2}\rfloor+1\),时间复杂度 \(\mathcal O(a1\times a2)\)。
  • 否则,暴力枚举所有满足第二个条件的数,判断一下是否可行即可,时间复杂度 \(\mathcal O(\frac{r-l}{a2})\)。

总时间复杂度 \(\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}\),考虑它是如何转移来的:

  • 之前有 \(j-1\) 个 \(0\),第 \(i\) 次交换换来一个 \(0\),由于前面 \(1\) 的个数与后面 \(0\) 的个数均为 \(m-j+1\),顾方案数为 \(f_{i-1,j-1}\times (m-j+1)^2\)。
  • 之前有 \(j + 1\) 个 \(0\),第 \(i\) 次交换换走一个 \(0\),由于前面有 \(j+1\) 个 \(0\),后面有 \(n-m-(m-j-1)=n-2m+j+1\) 个 \(1\),顾方案数为 \(f_{i-1,j+1}\times (j+1)(n-2m+j+1)\)。
  • 之前本来就有 \(j\) 个 \(0\),第 \(i\) 次操作没换走也没换来,四种情况:前面交换,后面交换,前后交换 \(0\),前后交换 \(1\),则方案数为 \(C_{m}^{2}+C_{n-m}^{2}+j(m-j)+(m-j)(n-2m+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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有