Solution Set - Codeforces Global Round 1~8
记号 | 含义 |
---|---|
VP 参赛/现场赛 | |
单纯做题 (一般是因为以前做过一些) | |
* | 参考题解 |
^ | 以前做过 |
~ | ( 的场次) 赛后独立过掉 |
推荐场次 | |
不推荐场次/屑题 | |
不难但值得一看的的好题 | |
✡️ | 神题 |
\newcommand{\chr}[1]{\underline{\text{#1}}}
\]
没做的大概率是懒得看了, 兔是这样的. (
Codeforces Global Round 1
Remark.
个人体验来说, ABC 写得比较慢, 竞速赛还是打少了. 但是 E 的一眼盯真又让节奏莫名其妙加快, 再因为 F 不想写 \(\log^2\) 导致没时间写 G 的讨论 (虽然补题的时候发现讨论仍有瑕疵).
除了 E, 题目质量不错, 推荐.
A. Parity
\(\mathcal O(k)\) 模拟即可.
B. Tape
用恰好 \(k\) 条不重合的胶带一定不劣. 选择最大的几个 \(b_i-b_{i-1}\) 不覆盖即可. 使用 std::nth_element
做到 \(\mathcal O(n)\).
C. Meaningless Operations
- 「C.性质/结论」
CF 风味诈骗题. 设 \(2^{k-1}\le a<2^k\), 注意到 \(\gcd(0,x)=x\), 当 \(a+1\neq2^k\) 时, 取 \(b=2^k-1-a\), 答案达到上界 \(2^k-1\). 当 \(a+1=2^k\) 时怎么办呢… 这样的 \(a\) 只有二十来个, 打表预处理出答案即可. 不计本地打表时间的话, 复杂度自然是 \(\mathcal O(q)\) 的.
当然, 我们也可以再想想计算 \(a=2^k-1\) 的不那么暴力的方法: \(\gcd(a\oplus b,a~\&~b)=\gcd(2^k-1,b)\), 因此答案为 \(a\) 的最大非平凡因子, 这就很好算了.
D. Jongmah
- 「A.DP-序列 DP」「C.性质/结论」
按颜色装桶, 画出桶的直方图以获得一些直观结论. 注意到如果一个 \(3\times3\) 的直方图区域被全部使用, 我们完全不用关心它是横着分成三组还是竖着分成三组. 竖着分是平凡的, 所以我们规定这样的区域被竖着分. 此时在我们的最终分组中, 对于同一个 \(a\), \((a-1,a,a+1)\) 不会出现超过两次, 则 \(a\) 被 \(a\) 后面的元素横向覆盖的次数不超过 \(4\) 次.
得到了这些常数的上界就能设计状态了, 令 \(f(i,a,b)\) 表示处理了 \(1\sim i\), \(i-1\) 剩下 \(a\le2\) 个必须被后面的东西覆盖, \(i\) 剩下 \(a\le b\le 4\) 个必须被后面的东西覆盖, 直接转移就行. 复杂度 \(\mathcal O(n+tm)\), \(t\) 为一个关于转移次数的常数.
E. Magic Stones
超级无敌史诗级经典老番, 变换操作就是交换相邻两个差分值, 因此 \(a,b\) 能互相转化当且仅当 \(a_1=b_1\), \(a_n=b_n\) 且 \(\{a_i-a_{i-1}\}_{i=2}^n=\{b_i-b_{i-1}\}_{i=2}^n\). 复杂度 \(\mathcal O(n\log n)\), \(\log n\) 来自离散化或者 std::map
.
F. Nearest Leaf
- 「A.数据结构-线段树」「B.离线」「C.思维」
一眼盯了一百个 \(\log^2\) 的做法, 因为赌气不想写, 又想了一大会儿.
分析被卡住的原因: 像给出区间 \([l,r]\) 这样的询问, 如果尝试离线, 太容易先入为主地去按照区间端点离线. 而这题恰恰利用特殊的结点编号形式, 按询问的 \(v\) 离线. 得到这个离线思路之后就没有障碍了.
具体来说, 我们将询问按照 \(v\) 离线, 在树上 DFS 枚举结点, 同时维护所有叶子当到前结点 \(u\) 的距离. 当从 \(u\) 经由边权为 \(w\) 的边走向儿子 \(v\) 时, \(v\) 子树内的所有距离 \(-w\), 其余所有距离 \(+w\), 从 \(v\) 回溯时则相反. 查询则需要求出一段区间内距离的最小值. 线段树维护这一过程, 可以做到 \(\mathcal O((n+q)\log n)\).
Remark.
清新的数据结构, 去套路化的思考要求, 挺不错的题. 按 \(v\) 离线的 motivation 是关键.
G. Tree-Tac-Toe *
- 「C.性质/结论」
题不难, 描述结论真的麻烦. 这题要求我们进行目的明确的分讨并简洁地描述结论.
首先是对已经被染白的结点的转化. 已有的白点可以制造先手, 那么构造一个先手局面就能表示白点. 具体地, 对于白点 \(u\), 加入新点 \(x,y,z\), 连接 \((u,x),(x,y),(x,z)\). 经过先后手的分析可以发现先手直接染 \(u\) 一定不劣, 且一定不可能利用 \(x,y,z\) 产生原来没有的局面, 因此这样的构造等价于 \(u\) 为白色.
到此, 我们只需要分析无色的树了.
结论一: 若存在 \(d_u\ge4\), 则白胜.
结论二: 若存在 \(d_u=3\), 且 \(u\) 的邻接点中有至少两个非叶结点, 则白胜.
证明都是显然的. 此时我们只剩下一种不平凡的情况:

设 \(u,v\) 为左右两端的三度点, 则链上所有到 \(u\) 的距离为奇数的点都是先手, 且对方仅能在左侧染色应对; 到 \(v\) 的距离为奇数的点也是先手, 且对方仅能在右侧染色应对. 因此当且仅当 \(d(u,v)\) 为偶数时先手必胜. 其余情况必然平局. 复杂度 \(\mathcal O(n)\).
Remark.
先构造性地转化 "已有白色", 从而大大简化讨论, 第一步的 motivation 值得留意.
Codeforces Global Round 2
Remark.
如果赛上切 A~F 的话, 似乎并没有什么很好玩的题. G 和 H 可以补一补, 不太推荐 VP.
A. Ilya and a Colorful Walk
如果左右同色, 答案一定产生于到左端或者右端; 如果左右异色, 答案是 \(n-1\). \(\mathcal O(n)\).
B. Alyona and a Narrow Fridge
顺序枚举 \(k\), 最有策略显然是排序后从大到小两两分组, 如果有单就单出最小的. 最粗糙的 \(\mathcal O(n^2\log n)\) 也能过.
C. Ramesses and Corner Inversion
一贯从 "可行操作张成的向量空间" 理解这类题. 注意到 \(2\times2\) 的操作在行上叠加, 可以得到同两行上的两个 \(2\times1\), 再将这两个 \(2\times1\) 在列上叠加, 可以得到任意矩形的四个角, 而这正是我们的可行操作. 因此, 可行操作张成的向量空间就是所有 \(2\times2\) 的操作张成的空间. 也即是, 原规则下有解, 等价于仅使用 \(2\times2\) 操作有解. 直接模拟一编就行. \(\mathcal O(nm)\).
D. Frets On Fire
对于给定 \([l,r]\), 第 \(i\) 条弦内出现的数为 \([s_i+l,s_i+r]\). 暴力处理询问的话, 我们自然会选择将区间按照左端点排序. 事实上这一顺序是恒定的, 我们可以先排出来. 称 \(s_{i+1}-s_i\) 为排序后两根弦 \(i\) 和 \(i+1\) 之间的 gap, 显然当 \(r-l+1\) 不超过 gap 时, 两条线段的贡献独立; 当 \(r-l+1\) 超过 gap, 两条线段中间全部被覆盖, 贡献就与 \(r-l+1\) 无关了. 贡献形式是一个分段函数. 因此我们再按照 gap 排序, 询问时二分出恰好未被 bridge 的 gap 的位置, 算算前后的贡献就做完了. 复杂度 \(\mathcal O((n+q)\log n)\).
E. Pavel and Triangles
- 「B.贪心」
差点看成上一场的 D 了. (
显然, 三角形的边长的形式必然是 \((x,y,y),~x\le y\). 如果 \(2y\) 配对是一定的, 即, 对于每个 \(y\), 我们知道有多少对 \(2y\) 组成了最终方案中的三角形, 那么 \((x,2y)\) 之间就是一个简单的括号贪心匹配.
接下来的贪心也是自然的: 我们先将所有 \(2y\) 全部配对, 从后到前扫描一遍以求出所有必然失配的 \(x\). 此后, 再将剩下的 \(2y\) 拆开. 拆开的过程肯定是拆开小的 \(2y\), 和两个大的 \(2y\) 分别匹配. 这部分损失是 \(\mathcal O(1)\) 的. 总之就是 \(\mathcal O(n)\) 贪心一遍结束.
F. Niyaz and Small Degrees ^
G. Get Ready for the Battle ^
- 「A.构造」
观察样例, 猜测答案能取到下界 \(\lceil\sum_i h_i/n\rceil\). 这为我们的构造指明了目标. 为了不造成浪费, 我们关注所有 \(h_i\bmod n\) 的值. 发现取 \(h_i\bmod n\) 排序后的差分为分组方案, 循环填数, 就能达到最优.
兔也不知道当时怎么想的, 所以很 unmotivated. 复杂度 \(\mathcal O(n)\).
H. Triple
- 「A.数学-生成函数」「A.数学-FWT」
看着挺有意思的 (因为是数数题), 来玩一玩.
令原条件中的 \(x,y,z\) 分别为 \(p,q,r\), 令集合幂级数 \(F_i(z)=pz^{a_i}+qz^{b_i}+rz^{c_i}\), 答案则为
\]
其中乘法为异或卷积. 当然, 这肯定是需要引入 FWT 的. 令 \(\mathcal F,\mathcal F_i\) 为左右项 FWT 后的结果, 则
\]
又当然, 这个 \(\mathcal F_i(z)\) 没办法直接求, 我们需要手动变换. 由于
\]
是 \(\{p,q,r\}\) 的线性组合, 且仅有 \(2^3\) 种, 我们可以尝试计数每一种组合的出现次数. 另一方面, 通过令 \(a_i'\gets 0,b_i'\gets a_i\oplus b_i,c_i'\gets a_i\oplus c_i\), 可以固定 \(p\) 的系数恒为 \(1\) 以减少讨论.
到此, 对于每个 \((S,x,y)\), 我们需要求出
\]
当 \(S\) 固定时, 要求的则是 \(c(-,-),c(-,+),c(+,-),c(+,+)\). 每个 \(c\) 中都带有两个真值表达式, 并不好算. 但是如 \(c(-,-)+c(-,+)\) 的线性组合却能完美避免这个问题. 令 \(B(z)=\sum_{i=1}^nz^{b_i'}\), \(C(z)\) 同理, \(D(z)=\sum_{i=1}^nz^{b_i'\Delta c_i'}\), 那么可以列出线性方程组:
c(-,-)+c(-,+)+c(+,-)+c(+,+)=n,\\
(c(+,-)+c(+,+))-(c(-,-)+c(-,+))=[z^S]\mathcal B(z):=u,\\
(c(-,+)+c(+,+))-(c(-,-)+c(+,-))=[z^S]\mathcal C(z):=v,\\
(c(-,-)+c(+,+))-(c(-,+)+c(+,-))=[z^S]\mathcal D(z):=w.
\end{cases}
\]
最后一个等式的构造相对较麻烦, 如果先猜想这种形式再去找组合意义可能会快一点.
肯定有家伙懒得解方程吧! 还是把解列一下:
c(-,-)=\frac{1}{4}(-u-v+w+n),\\
c(-,+)=\frac{1}{4}(-u+v-w+n),\\
c(+,-)=\frac{1}{4}(~~~u-v-w+n),\\
c(+,+)=\frac{1}{4}(~~~u+v+w+n).
\end{cases}
\]
挺好看的. 利用方程解出 \(c(x,y)\), 算出 \(\mathcal F(z)\) 再逆变换回去就行. 复杂度 \(\mathcal O(n+k2^k)\). 引入更多的元, 形式化罗列和解方程也是可以做到的, 不过这道题已经被加强过了.
Codeforces Global Round 3
Remark.
__builtin_parity
/__builtin_parityll
, 你们他妈赶快滚进标准库重载成一个东西.
A. Another One Bites The Dust
答案是 \(2c+2\min\{a,b\}+[a\neq b]\).
B. Born This Way
你好, 兔这题就做复杂了. 这里就只提正解吧.
Arkady 的策略是显然的: 找到最小的可用 \(a_i\), 然后找到最小满足 \(a_i+t_a\le b_j\) 的 \(b_j\), 在 \(b_j+t_b\) 时刻到达 C 地. 那直接枚举我们保留下的最小 \(a_i\), 从第一个可用 \(b_j\) 开始往后删直到删满 \(k\) 个, 对当前答案取最大值即可. 双指针做到 \(\mathcal O(n)\).
C. Crazy Diamond
- 「A.构造」
注意到一个位置 \(i\) 一定能跳到的位置只有 \(1\) 或者 \(n\). 于是我们保留这两个位置, 先让 \(2\sim n-1\) 归位. 枚举 \(p_x=2..n-1\), 先让 \(x\) 跳到 \(1\) 或 \(n\), 如果不能直接跳到 \(p_x\) 就跳到另一端再向 \(p_x\) 跳. \(2\sim n-1\) 归位后, 检查一下是否需要交换 \(p_1,p_n\). 最劣情况使用 \(4n\pm\mathcal O(1)\) 次交换.
D. Dirty Deeds Done Dirt Cheap
- 「A.构造」
你好, 兔又做复杂了. 这里就只提正解吧.
显然 \(a_i<b_i\) 的数对不能和 \(a_i>b_i\) 的数对交叉贡献. 仅考虑 \(a_i<b_i\) 的情况, 惊讶地发现按 \(a_i\) 降序排列就满足条件了. \(\mathcal O(n)\).
兔写的线段树维护贪心.
E. Earth Wind and Fire
- 「B.贪心」
注意到操作可以不改变石头间的相对顺序, 所以将 \(\{s_n\},\{t_n\}\) 排序后, 我们可以钦定 \(s_i\) 被移动到 \(t_i\). 这时, 若有 \(i<j\), \(s_i<t_i\) 的石头和 \(s_j>t_j\) 的石头可以相互拉进靠近自己的目标点. 于是按顺序扫描, 像括号匹配一样贪心地拉进就行了. 复杂度为排序的 \(\mathcal O(n\log n)\).
F. Foo Fighters ~
- 「A.构造」
不妨设原来所有 \(\textit{val}_i\) 之和 \(>0\). 虽然所有 bit 的地位是相同, 我们还是可以尝试插一棵 Trie 树辅助思考. 对于 \(u\) 子树, 设其左右儿子的贡献已经确定为 \(x,y\), 我们可以通过 \(u\) 对应的 bit 得到 \(x+y\) 或者 \(x-y\). 那如果说 \(x<0\), 我们就高枕无忧了.
如何找到这样一个 \(x<0\) 呢? 注意到没有 \(\textit{mask}_i=0\), 而所有 \(\textit{val}_i\) 之和 \(>0\), 所以从根到最左结点的路径上, 一定存在一个结点仅有和 \(>0\) 的右子树, 相当于找到了 \(x=0,y>0\), 调整这个位置的 bit 使之贡献 \(-y\), 一路回溯回去不会使贡献增大, 这样就构造出答案了.
实现的时候排个序就行, 复杂度是排序的 \(\mathcal O(n\log n)\).
注意 __builtin_parity(unsigned int)
, __builtin_parityll(unsigned long long)
. 心态整炸了.
Codeforces Global Round 4
Remark.
可能是信心场, 可以找状态的时候做.
A. Prime Minister
EI 读了六分钟题, 兔只读了五分钟, 兔看不起英语不好的人. (
题意: 问所有不超过 \(a_1\) 一半的 \(a_i\) 加起来再加上 \(a_1\), 是否超过所有数总和的一半.
这 A 题怕是整场比赛阅读量最大的.
B. WOW Factor
对于每个 o
, 求其前面的 vv
数乘上后面的 vv
数. \(\mathcal O(n)\).
C. Tiles
左上角 \(4\) 种方案, 其余第一行或者第一列上的 \(2\) 种方案, 此后其他格子被唯一确定. 因此答案是 \(2^{w+h}\). \(\mathcal O(\log(w+h))\).
D. Prime Graph
猜测当 \([n,\lfloor 3n/2\rfloor]\) 内有素数, 先连一个环, 然后加边把一些点的度数变成 \(3\), 直到总边数为素数即可. \(\mathcal O(n)\). 范围内的 \(n\) 可以很快枚举验证, 但一般情况兔完全不会证明 qwq.
E. Archaeology
左右双指针向内扫, 相邻不等的性质保证我们一定能选出足够数量的配对. \(\mathcal O(n)\).
F. Short/Long Colorful Strip
- 「A.DP-计数 DP」「A.DP-区间 DP」
F2 并不困难, 兔并没有思考 F1 的特殊解法, 就不分开讲了.
我们定义一个区间 \([l,r]\) 是完备的, 当且仅当出现在 \([l,r]\) 中的颜色仅出现在 \([l,r]\) 中. 设当前考虑的完备区间为 \([L,R]\), 被染成当前颜色的位置为 \(L\le p_1<p_2<\cdots<p_k\le R\). 那么, 我们要求 \((p_i,p_{i+1})\) 是完备段, 递归进去算贡献. 难点在于对 \([L,p_1]\) 和 \([p_k,R]\) 这段区间是否被当前颜色染的讨论.
注意到这样一个事实: 当某个时刻 \(c_i\neq c_{i+1}\), 则该时刻之后都必然有 \(c_i\neq c_{i+1}\). 因此, 设我们实际染色区间为 \([s,t]~(L\le s\le p_1,~p_k\le t\le R)\), 则 \([L,s)\), \([s,p_1)\), \((p_k,t]\), \((t,R]\) 都需要是完备区间. 当完备区间的一个端点固定时, 另一个端点仅有 \(\mathcal O(n)\) 个可能位置. 完备区间总数当然也是 \(\mathcal O(n^2)\) 的, 因此直接记忆化搜索求出完备区间 \([1,m]\) 的答案即可. 注意无解判定, 复杂度 \(\mathcal O(n^3+m)\).
G. The Awesomest Vertex ~
- 「A.分块」「A.数据结构-线段树」「B.Tricks」
看着榜上一大堆和兔一样一小时前六道然后调不出 G 的人, 兔就放心了. (
绝对值? 绝对不能带着绝对值! 注意 \(|x|=\max\{x,-x\}\), 而我们要求的是 \(\max\{|a|\times b\}\), 一开始就维护好 \(\max\{-a\times b\}\) 和 \(\max\{a\times b\}\) 就没有绝对值了.
法一 在 DFN 上转化后, 我们需要处理的问题是: 区间 \(a_i\gets a_i+k~(k>0)\), 区间询问 \(\max\{a_i\times b_i\}\). 分块+单调队列维护凸包可以简单 \(\mathcal O((n+q)\sqrt n)\). (你说得对, 但是真的难调, 分块都好难调啊!)
法二 考虑直接用线段树维护直线 \(b_ix+a_ib_i\). 由于 \(x\) 单增, 所以区间内最大值的取值点单调向右移动, 有意义的移动不超过 \(\mathcal O(\textit{len}^2)\) 次 (直线交点数量). 虽然凸包本身没办法合并, 但最有答案和最近的有意义移动点是可以简单记录的. 势能分析可以得到 \(\mathcal O((n+q\log n)\log^2n)\) 的复杂度, 兔没有细看证明 qwq. 可以参考这里. UPD: 这个很像 KTT?
Codeforces Global Round 6
A. Competitive Programmer
各位数字之和为 \(3\) 的倍数, 拿一个后导 \(0\) 后还有偶数位.
B. Dice Tower
一个骰子的相对两面之和恒为 \(7\), 由此只有最上面一个骰子的方向需要被考虑.
C. Diverse Matrix
观察样例, 猜测最小 magnitude 为 \(r+c\), 于是我们需要将 \(1\sim r+c\) 安排为每行每列的 \(\gcd\). 设行列 \(\gcd\) 为 \(\{R_r\},\{C_c\}\), 尝试令 \(a_{ij}=R_i\times C_j\). 当 \(1\in R\), 可以让所有列的 \(\gcd\) 一定合法, 反之亦然; 当 \(x,x+1\in R\), 也可以让所有列的 \(\gcd\) 一定合法, 反之亦然. 那么构造就很简单了. \(\mathcal O(rc)\).
D. Decreasing Debts
只要每个人应得的总钱数一定, 方案就合法. 求出这一数值, 随便匹配欠债关系即可. \(\mathcal O(n)\).
E. Spaceship Solitaire
设 \(c_i=\sum_j[u_j=i]\), 则答案有下界 \(\sum_i\max\{0,a_i-c_i\}\). 可以证明下界可取, 当然作为 competitor 的兔可以不证明. (
F. Almost Same Distance
- 「C.性质/结论」「C.细节」
这个 仅用于表达兔对细节题的讨厌.
当 \(k\) 一定时, 合法点集一定为存在一个或两个相邻花蕊的, 花瓣很长的菊花. 枚举花蕊, 记录好子树深度后可以求答案. 同时注意到 \(\textit{ans}_k\ge\textit{ans}_{k+2}\), 所以可以取远端更新然后继承答案. 精细扫描线可以做到 \(\mathcal O(n)\).
妈的当时不想写题解, 现在也不想写.
Codeforces Global Round 7
Remark.
这场挺创人的. E 和 F1, F2 挺好玩儿, D 可能写着比较烦人 (指在 VP 状态下写细节讨论).
A. Bad Ugly Numbers
\(3\) 填最低位, 其余位用 \(2\) 来调整模 \(3\) 余数. \(\mathcal O(n)\).
B. Maximums
按题意模拟, \(\mathcal O(n)\). 您这题放哪个水平都不 educational 吧.
C. Permutation Partitions
产生最大值贡献的一定是前 \(k\) 大, 找到它们的位置, 中间的分隔点随意移动, 乘法原理算方案即可. \(\mathcal O(n)\).
D. Prefix-Suffix Palindrome
去除已经回文的前后缀, 求 \(S+\chr{\$}+\text{rev}(S)\) 和 \(\text{rev}(S)+\chr{\$}+S\) 的 border 决策剩下的回文. KMP 做到 \(\mathcal O(n)\).
E. Bombs
答案不增, 立马把问题转化成判断预期答案 \(x\) 是否可行. \(x\) 活下来的条件是: 存在一个 \(i\), 使得 \(i\) 后面 \(\ge x\) 的数严格多余 \(i\) 后面的炸弹数. 线段树维护差值最小值即可. \(\mathcal O(n\log n)\).
F1. Wise Men (Easy Version)
- 「A.DP-状压/插头 DP」「B.Meet in Middle」
一个很勉强的 meet in middle 做法. 我们暴力 DP 时, 需要记录已选人的集合状态和当前字符串的状态, \(4^{14}\) 肯定不行. 但注意字符串对转移形式没有任何影响, 所以可以 meet in middle: 只求出所有 \(n/2\) 个人的集合产生的字符串状态, 然后两半拼起来算方案数. 这样减轻了对字符串状态的记录压力, 复杂度毛估为 \(\mathcal O\left(\binom{n}{n/2}\times 2^n\right)\), 其实也就在暴力基础上除了个 \(\sqrt n\).
F2. Wise Men (Hard Version) *✡️
- 「A.数学-FWT」「B.Tricks」「C.思维」
\([S_1\cap S_2=\varnothing]z^{S_1\cup S_2}=[|S_1\cup S_2|=|S_1|+|S_2|]z^{S_1\cup S_2}\), 多个 \(S\) 同理. 这是子集卷积的原理, 但也是一个巧妙的转化 "不交" 的技巧.
F1 中, 我们利用 "字符串对转移形式无影响" 的性质完成了 meet in middle, 而这种 "无影响" 还能更深入的挖掘 — 将 "构造字符串" 分拆为多个几乎独立的计数情景.
具体地, 我们枚举字符 \(\chr{1}\) 的连续段 (也可以是空段, 对应单个人), 将它们有序地排列到 \(n\) 个位置上. 不同段间可能仍然有 \(\chr{1}\), 只需要简单子集容斥一下.
如何安排序列呢? 首先可以 DP 出将集合 \(S\) 串成全 \(\chr{1}\) 路径的方案数. 枚举 \(n\) 的整数拆分, 求出满足条件的子集组合方式, 最终就能得到每种整数拆分对应的方案数. 然后枚举最终答案字符串, 找到其极大连 \(\chr{1}\) 段划分对应的方案数, 对这一组方案数子集容斥, 就能得到答案. 复杂度 \(\mathcal O(2^n\text{part}(n))\).
Remark.
这种完全跳出 DP 灵活地使用已知技巧计数的东西好酷. (
Codeforces Global Round 8
Remark.
狙击场, 任何系列赛事都是越出越难是吧 qwq.
A. C+=
\((a,b)\) 能一步变成 \((a+b,a)\) 或者 \((a+b,b)\), 你说你应该选哪种呢?
B. Codeforces Subsequences
均匀的一堆 \(\chr{c}\), 一堆 \(\chr{o}\), 一堆 \(\chr{d}\), …, 一堆 \(\chr{s}\), 这样肯定最省长度. 目测一下也不会构造出意料之外的子序列. 那么就 \(\mathcal O(k^{1/|S|})\) 结束了.
C. Even Picture
兔在《world.construct(me);》加强了这道题.
D. AND, OR and square sum
注意到 \(\sum_ia_i\) 恒定, 而一次操作可以将 bit "富集" 向其中一个数, 这正是最大化平方和所期望的. 因此, 把每个 bit 尽量向前集中就能得到最优的 \(\{a_n\}\).
E. Ski Accidents
- 「A.构造」
\(7=1+2+4\), 尝试把中转点分为 \(A,B,C\) 三组, 满足 \(|C|\le 2|B|\le 4|A|\), 此时扔掉 \(C\) 就非常合适了.
在二叉树结构上的 \(A,B,C\) 更像是三染色. 染色可得:
\(A\): 入边 (若存在) 都来自 \(C\).
\(B\): 入边存在且都来自 \(A\).
\(C\): 存在入边来自 \(B\).
正确性不难证明. 复杂度 \(\mathcal O(n)\).
F. Lamps on a Circle
- 「A.构造」「C.非传统-交互题」
直接考虑收敛到的状态. 在 Bob 操作之前, 肯定不存在一个长于 \(k-1\) 的亮灯连续段, 否则 Alice 的操作就无效了. 在这种情况下, 最优的可能状态为 \((\chr{1}^{k-1}\chr{0})^{+\infty}[:n]\), 不过需要令最后一位为 \(\chr{0}\). 计算此时 \(\chr 1\) 的数量为 \(n-1-\lfloor (n-1)/k\rfloor\), Bob 跟上操作后剩下 \(n-\lfloor (n-1)/k\rfloor-k\), 所以可以在 \(\sqrt n\) 附近找到最优的 \(k\). 交互时一直用这个 \(k\) 来构造目标序列即可.
Solution Set - Codeforces Global Round 1~8的更多相关文章
- CodeForces Global Round 1
CodeForces Global Round 1 CF新的比赛呢(虽然没啥区别)!这种报名的人多的比赛涨分是真的快.... 所以就写下题解吧. A. Parity 太简单了,随便模拟一下就完了. B ...
- Codeforces Global Round 1 - D. Jongmah(动态规划)
Problem Codeforces Global Round 1 - D. Jongmah Time Limit: 3000 mSec Problem Description Input Out ...
- Codeforces Global Round 2 题解
Codeforces Global Round 2 题目链接:https://codeforces.com/contest/1119 A. Ilya and a Colorful Walk 题意: 给 ...
- Codeforces Global Round 1 (A-E题解)
Codeforces Global Round 1 题目链接:https://codeforces.com/contest/1110 A. Parity 题意: 给出{ak},b,k,判断a1*b^( ...
- Codeforces Global Round 3
Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...
- Codeforces Global Round 1 (CF1110) (未完结,只有 A-F)
Codeforces Global Round 1 (CF1110) 继续补题.因为看见同学打了这场,而且涨分还不错,所以觉得这套题目可能会比较有意思. 因为下午要开学了,所以恐怕暂时不能把这套题目补 ...
- 【手抖康复训练1 】Codeforces Global Round 6
[手抖康复训练1 ]Codeforces Global Round 6 总结:不想复习随意打的一场,比赛开始就是熟悉的N分钟进不去时间,2333,太久没写题的后果就是:A 题手抖过不了样例 B题秒出思 ...
- Codeforces Global Round 11 个人题解(B题)
Codeforces Global Round 11 1427A. Avoiding Zero 题目链接:click here 待补 1427B. Chess Cheater 题目链接:click h ...
- Codeforces Global Round 17
Codeforces Global Round 17 A. Anti Light's Cell Guessing 坑点:\(n=1,m=1\) 时答案为 \(0\) . 其他情况:当 \(n=1\) ...
- Codeforces Global Round 2 Solution
这场题目设置有点问题啊,难度:Div.2 A->Div.2 B->Div.2 D->Div.2 C->Div.2 D->Div.1 D-> Div.1 E-> ...
随机推荐
- python处理大量数据excel表格中间格式神器pickle.pkl文件操作说明
读取写入千万级别的excel文件费时费力,调试起来比较慢,面对这个问题,第一步可以先无脑全部转换成pkl文件,这样几乎和内存操作一样的速度. 例如: t=pd.read_excel("12月 ...
- springboot 复杂邮件发送
application.yml配置 密码为邮箱开启smtp时邮箱服务商提供的密码
- Next.js 深度教程:服务端渲染、静态生成到增量静态再生 | 2024最新版
优化字体和图像 书接上回,我们学习了如何设计Next.js应用程序,让我们继续优化主页和添加自定义字体.图像. 在网站设计中,字体扮演着关键角色,然而,若需获取并加载字体文件,项目中引入自定义字体可能 ...
- EVE-NG全面教程带下载资源以及链接-原创
有关于EVE-NG的教程和资源 https://forum.eve-ng.cn/forum.php 1. 经验丰富的专业同行较多 2. 官方论坛,权威可靠 3. 有免费且可靠的镜像可以下载 并且简单好 ...
- 基于pikachu靶场的水平越权详解
1. pikachu靶场搭建 如果你在之前已经使用过phpstudy了,参考pikachu 靶场环境搭建 如果在靶场搭建中遇到一些问题,参考皮卡丘靶场搭建遇到的问题大全 2. 水平越权简介 水平越权是 ...
- 13-2 c++拷贝控制和资源管理
目录 13.2.1 行为像值的类 类拷贝赋值运算符的编写 13.2.2 定义行为像指针的类 引用计数 定义一个使用引用计数的类 为了定义这些成员,我们首先必须确定此类型对象的拷贝语义.一般来说,有两种 ...
- 2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k, 定义一个子序列的能量为子序列中任意两个元素之间的差值绝对值的最小值。 找出nums中长度为k的所有子
2024-11-13:求出所有子序列的能量和.用go语言,给定一个整数数组nums和一个正整数k, 定义一个子序列的能量为子序列中任意两个元素之间的差值绝对值的最小值. 找出nums中长度为k的所有子 ...
- rust 终端输出 debug 信息
配置方法 将 env_logger log 添加到 Cargo.toml : 打开 Cargo.toml 文件并在 [dependencies] 部分下添加 env_logger log . [pac ...
- ANTLR语法层的选项及动作 - ANTLR
ANTLR语法层的选项 ANTLR语法层的选项中可以设置一系列的键值从而影响ANTLR输出的代码.这些选项是全局的,除非在某条规 则中覆盖了这些选项,否则这些选项会影响到该语法中的所有元素.选项应该紧 ...
- PythonDay1Base
PythonDay1Base 变量 即python运行过程中可以发生改变的量,如同数学中的未知数X,将一个确定的量赋值给变量. 变量定义原则 由英文大小写,数字以及下划线_组成 不能以数字开头 不能以 ...