做题记录 25.6.7

\(\textcolor{purple}\odot\) CF1777F Comfortably Numb

分治,分别考虑最大值在左侧和最大值在右侧的情况,枚举最大值所在的一侧,双指针出另一侧的范围,用 \(\text{trie}\) 保存另一侧的异或和,总时间复杂度 \(O(n\log n\log V)\)

代码

参考

\(\textcolor{purple}\odot\) CF1776J Italian Data Centers

对于一个点 \(i\),令第 \(k\) 次时它分裂出的一个点为 \((i,\overline s)\),则令 \(k+1\) 次分裂出的为 \((i,\overline{s0})\)\((i,\overline{s1})\)

则对于初始的边 \((u,v)\),若 \(c_u=c_v\),则 \(\forall 0\le i<2^k\)\((u,i)\)\((v,i)\) 连边,否则 \((u,i)\)\((v,\lnot i)\) 连边

对于点 \(i\)\((i,\ast)\) 内部的连边同 \(k\) 维立方体的棱

对于所有 \((i,\ast)\),只保留 \((i,0)\)\((i,2^k-1)\)\(2n\) 个点按上述方式连边,答案为 \(\lfloor\frac12\max_{1\le i,j\le n}(dis((i,0),(j,0))+dis((i,0),(j,1))+k)\rfloor\),即最长环的一半

时间复杂度 \(O(n^3)\)

代码

参考

\(\textcolor{purple}\odot\) CF1776D Teamwork

贪心,枚举时刻,按做最后一题的时间降序考虑每个人,对于每个人按做题时间降序考虑每种题,若当前时刻此人可以做这道题,则跟新,可证这样最优

时间复杂度 \(O(l)\)

代码

参考

\(\textcolor{purple}\odot\) CF1776C Library game

显然 \(\text A\) 的最优决策为从大到小枚举 \(a_i\),从左往右找到第一个可以容纳 \(a_i\) 的位置放置

对于 \(\text B\),设 \(\text B\) 希望 \(\text A\) 在放置 \(a_p\)(排序后第 \(p\) 大)时无法操作,则 \(\text B\) 希望在操作到 \(a_p\) 之前令所有位置 \(k\cdot a_p\mid 1\le k\le\lfloor\frac{m}{a_p}\rfloor\) 都被放置,因此要求 \(\lfloor\frac{m}{a_p}\rfloor<p\),即 \(p\cdot a_p>m\),此时 \(\text B\) 的最优决策为选择给定区间中任意一个 \(a_p\) 的倍数位置(若不存在则说明对方不是最优决策,此时任意选择即可)

因此 \(\exists p,p\cdot a_p>m\)\(\text B\) 必胜,否则 \(\text A\) 必胜

代码

参考

\(\textcolor{purple}\odot\) CF1778F Maximizing Root

显然每次选择 \(\gcd\) 最优

特判 \(k=0\),则答案一定为 \(d\cdot a_1\),其中 \(d\mid a_1\)

\(V=1000\) 时合法的 \(d\) 的数量不超过 \(32\),因此从大到小依次尝试 \(d\),即求出能否在 \(k-1\) 次操作内令所有 \(a_i\) 都是 \(d\) 的倍数

\(gd_u\) 为子树 \(u\) 内权值的 \(\gcd\),令 \(csq(u)=\min_{u\mid c^2} c\)

\(F(u,d)\) 表示要使子树 \(u\) 内的权值都是 \(d\) 的倍数所需的最小操作次数

\(d\mid gd_u\)\(F(u,d)=0\)

\(d\nmid gd_u,d\mid gd_u^2\)\(F(u,d)=1\)

\(d\nmid gd_u^2\),且 \(u\) 为叶子或 \(d\nmid a_u^2\) 时,\(F(u,d)=\infty\)

否则 \(F(u,d)=1+\sum_{v\in son(u)}F(v,csq(d))\)

时间复杂度 \(O(nD)\),其中 \(D=32\) 为最大因子数量

代码

参考

\(\textcolor{purple}\odot\) CF1775F Laboratory on Pluto

显然 \(a=\lfloor\sqrt n\rfloor,b=\lceil\frac na\rceil\) 时周长取到最小,构造方案是容易的

计算方案数相当于给定 \(s\ge 0\) 求出把 \(s\) 分配到四个角落的方案数 \(g_s\),其中 \(s=O(\sqrt n)\),显然不会形成一个额外的行

\(f_s\) 表示一个角落的情况,则 \(g=f^4\),容易 \(O((\sqrt n)^2)=O(n)\) 卷积

\(f_s\) 相当于 \(s\) 的拆分数,容易 \(O((\sqrt n)^2)=O(n)\) \(dp\)

\(u=1\) 时总时间复杂度 \(O(\sum n)\)\(u=2\) 时总时间复杂度 \(O(\sum \sqrt n)\)

代码

参考

\(\textcolor{purple}\odot\) CF1774F2 Magician and Pigs (Hard Version)

维护可重集 \(S\) 和非负整数 \(u\),初始 \(S=\mathbb\emptyset,u=0\),操作 \(1\) 转化为 \(S\gets S\cup\{x\}\),操作 \(2\) 转化为 \(S\gets \{v-x\mid v\in S\},u\gets u+x\),操作 \(3\) 转化为 \(S\gets S\cup \{v-u\mid v\in S\},u\gets 2u\),最终答案为 \(|\{v\in S\mid v>0\}|\)

考虑一个操作 \(1\),设加入的值为 \(x\),之后的 \(3\) 操作依次在 \(p_{1\sim t}\)\(p_i\) 处的 \(u\)\(x_i\),从当前操作到结束为止操作 \(2\)\(x\) 的总和为 \(s\),则 \(x\) 对应到最终集合中的 \(x-s-[0/1]x_1-[0/1]x_2-\cdots-[0/1]x_t\),且满足 \(x_i\ge 2x_{i-1}\)

问题转化为给定 \(x_{1\sim t}\)\(b\),满足 \(x_i\ge2x_{i-1}\),求出有多少 \(S\subseteq x\) 满足 \(\sum S<b\)

从大到小扫描 \(x_i\),若 \(b>x_i\) 则答案加上 \(2^{i-1}\),最终答案加上 \(1\)

\(x_1>0\)\(t=O(\log V)\),因此需要特判一段前缀 \(0\)

总时间复杂度 \(O(n\log V)\)

代码

参考

posted @ 2025-06-08 08:14  Hstry  阅读(3)  评论(0)    收藏  举报