[北大校赛/题解] PKUCPC2022 题解
叠个甲 : 因为似乎没地方交题 , 所以只能口胡 , 可能 ( 必定 ) 出锅 .
A. Random Sequence
签到 , 数一下前后相等的频率即可 .
B. Oshin Impact
能想出这个题的构造说明你的思维灵活的像是山里灵活的狗 .
一句话构造方法 : 分出 \(n\) 个 \(515\) 流 , 每流拆两份 , 组合出所有值 .
具体实现 , 把敌人先按照 \(a_i\) 递增排序 , 对于第 \(i\) 个人 , 可以通过调整第 \(i\) 条流的分法 , 使其正好为 \(a_i\) . 在此基础上 , 贪心地先利用前面分出的 "废料" 流 . 最后第 \(i\) 条流一部分 \(b_i\) 流向第 \(i\) 个人 , 另一部分 \(515-b_i\) 为废料 , 如果后面没有人用到这条流就连向 \(-1\) .
用堆来实现利用废料流 , 复杂度 \(O(n\log n)\) .
证明正确性 . 首先总流量为 \(515n\ge \sum a_i\) , 且以上构造保证了每个人流量不大于 \(a_i\) , 因此如果这样构造不合法 , 说明存在 \(i\) , 使流入流量 \(b_i<a_i\) , 且此时第 \(i\) 条流全部 \(515\) 流向第 \(i\) 个人 . 而前 \(i\) 个人能得到的流总和为 \(515i\ge \sum\limits_{j=1}^{i}a_i\) . 说明存在至少一条废料流 \(w\) 被丢弃 ( 连向 \(-1\) ) . 又因为 \(w<515\) , 因此必然可以通过调整第 \(i\) 条流的流量 , 并把这条废料流给第 \(i\) 个人 , 使流量变为 \([b_i,b_i+w]\) 中的任意一个值 . 因此这条流必然被第 \(i\) 个人选 , 矛盾 .
因此该构造具有正确性 .
C. Phone and Cup
签到x2 , 比一下上下左右界 .
D. Network Transmission
给一张图 , 点有点权边有边权 , 有一次机会把一个点权变成 \(0\) , 求 \(1\) 到 \(n\) 最短路 .
分层图最短路 , 一层表示没用过机会 , 一层表示用过 , 拆入点出点 , 同层的连点权 , 层间连 0 .
直接建出来常数过大 , 可以不用建 , 直接在原图上跑 .
E. Form a Honor of Kings Team
直接状压+背包 dp , 设 \(f_{i,s}\) 表示已经确定了 \(s\) 集合内的队员 , 花费为 \(i\) 的最大能力值 . 随便更新 , 如果用子集枚举那么非常快 , 不用应该也过得去 .
H. shuffles on the tree
这个树设定本质上就是对所有子树的多重集各查询一次 , 非常 ridiculous .
很容易发现对每个子树答案就是 \(size\) 减去同种颜色出现的最大次数 .
有无数种方法树上维护这一点 .
I. Anipop
结论 : 把所有只有第一行为黑的位置视作 0 , 只有第二行为黑的位置视作 1 , 其余视作没有元素 , 构造一个 01 串 . 把这个 01 串划分成若干个 01 交替出现的串 , 答案为最小划分数+1 .
或许存在更简洁的结论形式和对应证明 .
下面提供这个结论的略证 :
引理 1 : 任意的操作 , 只有黑白交替的部分有意义 .
具体来说 , 例如操作中有一段为 \((X)B\underline BW(X)\) , 交换后的结果为 \((X')X\underline BBW\) , 中间的 \(B\) 相当于没有变换 , 因此我们只考虑黑白交替的操作 .
引理 2 : 存在一种最优解 , 已经上下配对的位置不需操作 , 上下都没有黑色的位置不需操作 . 对这些位置操作显然更劣 .
那么按照结论的方式构造出字符串 , 相当于要把第一行所有的 1 移动到第二行对应的位置 , 因此等价于通过若干次操作使串 01 翻转 . 而只对黑白交替进行操作 , 等价于进行子序列 01 翻转 .
根据这个建模也可以直接证明只移动第一行和两行都移动等价 .
引理 3 : 存在一种最优解 , 每个位置恰好被进行一次子序列 01 翻转 .
因为是01交替子序列翻转 , 而非任意翻转 , 因此当一个位置 , 不妨设为 0 , 完成翻转后变为 1 , 再被翻转相当于从前面拿了一个 0 , 向后面传了一个 1 , 必定不优直接把原来的 1 传给后面 .
因此问题等价于把这个 01 串最小划分为偶数长度 01 交替串 ( 因为要考虑环上 01 交替 ) .
引理 4 : 01 串最小划分为偶数长度 01 交替串 , 数量等于划分为 01 交替串 ( 不要求奇偶性 ) .
考虑对不要求奇偶性的划分调整使其变为偶数长度 .
由于 01 数量相等 , 那么奇数长度串可以两两配对 , 使得一对子串中一个 0 多 , 一个 1 多 .
如果前一个串右端的 0 比后一个串右端的 1 靠后 , 把这个 0 给后一个串 , 反之亦然 .
J. Gene Recombination
快速读题 : 一个细胞有共 \(n\) 对染色体 , 它生成的配子有 \(n\) 个染色体 , 第 \(i\) 个染色体是长度为 \(len_i\) 的 01 串 .
按照如下方式生成一个包含 \(n\) 个染色体的配子 :
对第 \(i\) 个染色体 , 先有 \(\begin{aligned}\frac{1}{2}\end{aligned}\) 概率全为 \(0\) , 有 \(\begin{aligned}\frac{1}{2}\end{aligned}\) 概率全为 \(1\) , 然后对于这个染色体第 \(j\) 位 , 有 \(p_{i,j}\) 的概率异或上 \(1\) .
不同染色体之间生成过程独立 .
求生成 \(m\) 个配子 , 期望生成多少本质不同的配子 .
sub1
\(2^d\) 枚举出每一种可能的配子 \(s\) , 并容易地算出生成一个这种配子的概率 \(p(s)\) , 那么完全不包含这种配子的方案出现的概率是 \((1-p(s))^m\) . 答案为 \(2^d-\sum\limits_s \left(1-p(s)\right)^m\) .
sub2
无法枚举所有配子 , 考虑并行处理所有配子的概率 .
注意到 \((1-p(s))\) 的形式不容易并行计算 , 所以用二项式定理拆一下 :
\(\sum\limits_sp(s)^k\) 可以 dp 出来 .
具体地 , 对于第 \(i\) 条染色体 , 设 \(f_{j,k}\) 表示选 \(j\) 个相同染色体 , 其中有 \(k\) 个初始选了全 \(1\) , 这些染色体 \(p(s)\) 的积 . 对这条染色体逐位转移 , 转移是容易的 . 注意初值要带上 \(\begin{aligned}\frac{1}{2^j}\end{aligned}\begin{pmatrix}j\\k \end{pmatrix}\)的系数 , 如果不理解为什么有组合数可以把转移式子对应的和式形式写出来然后用二项式定理再拆一步 .
不同染色体之间独立 , 概率直接乘积即可 .
这样就解决了这道题 .
K. Peaceful Gomoku
考虑对于全黑矩形棋盘 , 在所有 \((x+y) \pmod 5\) 相等的 \((x+y)\) 放白即可保证满足条件 .对于有白点的情况同理 .
根据抽屉原理 , 至少取其中一个同余系 , 需要修改的点 \(\le \left \lfloor \frac{n}{5}\right \rfloor\) .
M. Sekiro™: Shadows Die Twice
若 \(x_u\in[l_v,r_v]\) , 认为 \(v\) 对 \(u\) 连有向边 , 表示限制关系 .
在不允许重生的情况下 , 有解当且仅当存在拓扑序 , 即没有环 .
允许重生一次相当于无视限制移除一个点 , 即删去一个点后是否存在拓扑序 .
显然 , 如果原图有环 , 它一定至少包含一个二元环 . 因此找到第一个二元环后 , 分别验证删去这两个点后是否合法即可 .
找二元环相当于二位数点 . 复杂度 \(O(n\log n)\) 实现较为精细就可以通过 .
注意到合法情况下二元环必须共点 , 因此最多有 \(n\) 个 . 考虑把所有二元环都找出来 , 对于 \(pos_i\) , 相当于找所有 \(pos_j+r_j\ge pos_i\) 的 \(j\) 序列的一个后缀 .
因此可以用链表维护 \(j\) 序列 , 每次直接逐一跳后缀 , 中间如果遇到了不满足 \(pos_j+r_j\ge pos_i\) 的就扔掉 .
复杂度 \(O(n)\) .

                
            
        
浙公网安备 33010602011771号