[北大校赛/题解] PKUCPC2024 题解

题目链接

叠个甲 : 因为似乎没地方交题 , 所以只能口胡 , 可能 ( 必定 ) 出锅 .

A. Grid Walking

考虑全局最大值和全局最小值 ( 如果不分处左下和右上 ) 一定要分到一起 . 这时其他数和最大最小值分在同一区域产生的贡献一定更小 , 发现除了左下或右上都在同一部分内 .

因此考虑左下单独一块和右上单独一块两种情况即可 .

B.P-adic Number Calculator

本质上就是让你构造一个 10 位数 , 使它与输入的 \(n\) 按 7 进位乘之后 , 后 10 位是 \(1\) 和 \(-1\) .

因此从低位向高位逐位构造即可 .

注意 \(-1\) 相当于 \(6666666666\) , 这可以通过样例一得出 . 还有你输入的 \(n\) 是 \(7\) 进制 , 转回十进制才能正常乘法 .

C.Orienteering

设 \(dis_u\) 为 \(u\) 走到 \(n\) 的最小代价 .

那么 \(dis_u\) 有两种更新方式 : \(dis_u\gets dis_v+a_u\) 或者 \(dis_u\gets \max dis_{son_u}\) .

这很类似于最短路 , 我们仍然贪心地取没有用来更新其他点的 , \(dis_u\) 最小的 \(u\) , 并且对所有能到达 \(u\) 的点更新 .

但是还要考虑第二种更新 . 考虑在所有 \(son_u\) 都用来更新之后 , 再对 \(u\) 使用第二种更新 . 如果当前 \(dis\) 最小的 \(u\) 已经完成了第二种更新那么它的值显然不会变换 . 否则说明存在 \(dis_{son_u}\ge dis_u\) 这时第二种更新也不会使 \(dis_u\) 变换 .

因此类似于 dijsktra 地处理即可 .

注意到边权 \(\le 5\) , 可以开 \(5\) 个队列模拟优先队列做到 \(O(n)\) , 但是没必要 .

D.Number Solidity

考虑对于一个确定的数 \(x\) , 怎样最大化操作次数 .

显然 \(b\) 会选择 \(x\) 的最小质因数 , 然后对于 \(x\) 的每种质因数一次消去 \(b\) 个 .

因此 , 如果一个数能消去 , 它一定 \(\ge b^b\) , 由于值域是 \(10^{14}\) , 所以只有 \(2,3,5,7,11\) 可能成为 \(b\) .

枚举 \(b\) , 考虑所有最小质因数为 \(b\) 的 \(x\) , 再枚举每个质因数 \(a\) , 那么所有 \(a^b\) 的倍数会贡献一次 , 所有 \(a^{2b}\) 的倍数会额外贡献一次 , 以此类推 . 注意还需要保证这些数的最小质因数是 \(b\) , 所以需要容斥掉有 \(<b\) 的质因数的情况 .

假设枚举第 \(i\) 小的质因数 \(b\) , 则这一次复杂度是 \(O(\sqrt[b]n 2^i)\) . 瓶颈是枚举 \(b=2\) , 因此总复杂度是 \(O(\sqrt n)\) .

E.Grade Adjustment

贪心题 .

注意到可以通过贪心 , 每次取仍然能够符合所有限制下的最大值 , 可以取出一组最优的分数序列 , 现在的问题是把这些分数分给 \(n\) 个区间 , 使得贡献值最大 .

贡献值的计算方式是 \([0,l] \to -1 , [l,r]\to 0 , [r,\inf] \to 1\) , 相当于分了三段 .

注意到 , 存在一种最优的分配 , 贡献为 \(1\) 的个数是所有方案中最大的 . 因为放弃一个 \(1\) 贡献至少 \(-1\), 最多也只能让一个 \(-1\to 0\) , 总贡献值不优 .

因此贪心地先最大化贡献为 \(1\) 的个数 . 从小到大考虑所有分数 \(x\) , 如果存在 \(r_i<x\) , 就贡献一个 \(1\) , 并且取走 \(l_i\) 最大的 . 这种取法能够得到 , 贡献 \(1\) 最大化 , 同时保留最小的 \(l_i\) 的方案 .

然后考虑贡献为 \(0\) 的 , 也是从小到大考虑就可以了 .

F.array

推一波式子

\[f_n=\frac{1}{2}\sum\limits_{i=2}^{n} \frac{n!(n-1)!}{(n-i)!(n-i)!}f_{n-i} \\ \frac{f_n}{n!n!}=\frac{1}{2n}\sum\limits_{i=2}^{n} \frac{f_{n-i}}{(n-i)!(n-i)!} \]

设 \(\begin{aligned}g_n=\frac{f_n}{n!n!}\end{aligned}\) 并维护前缀和 , 即可递推 .

G.Edge-Deletion Game

神仙博弈题 .

对于图 \(G\) , 把它去掉一条边 \(a\) 表示为 \(G-a\) , 考虑讨论一些特殊情况 :

  1. 存在一度点 \(x\) , 其唯一边为 \((x,y)\) 且 \(y\) 为一度点 .

    若 \(G-(x,y)\) 先手必胜 , 那么先手就可以先拿走 \((x,y)\) , 然后走必胜策略 , \(G\) 也先手必胜 .

    若 \(G-(x,y)\) 先手必败 , 如果先手先拿走 \((x,y)\) 必败 , 如果不拿走 , \(G-(x,y)\) 部分和 \((x,y)\) 无关一定会走到必胜态上 , 后手只需拿走 \((x,y)\) 然后走必胜策略 , \(G\) 也先手必败 .

    即去掉 \((x,y)\) 结果不变 .

  2. 存在一度点 \(x\) , 其唯一边为 \((x,y)\) 且 \(y\) 为二度点 , 且 \(y\) 的另一条边为 \((y,w)\) , 且 \(w\) 为一度点 .

    与 1 同理 .

    即去掉 \((x,y),(y,w)\) 结果不变 .

  3. 存在一度点 \(x\) , 其唯一边为 \((x,y)\) 且 \(y\) 为二度点 , 且 \(y\) 的另一条边为 \((y,w)\) , 且 \(w\) 不一度点 .

    若 \(G-(x,y)\) 先手必胜 , 那么先手就可以先依次拿走 \((x,y),(y,w)\) , 然后走必胜策略 , \(G\) 也先手必胜 .

    若 \(G-(x,y)\) 先手必败 , 先手拿走 \((y,w)\) 后 , 后手面临情况 1 , 且必败 , \(G\) 就先手必胜 .

    即 \(G\) 先手必胜 .

  4. 存在一度点 \(x\) , 其唯一边为 \((x,y)\) 且 \(y\) 度数 \(>2\) .

    若 \(G-(x,y)\) 先手必胜 , 那么先手就可以先拿走 \((x,y)\) , 然后走必胜策略 , \(G\) 也先手必胜 .

    若 \(G-(x,y)\) 先手必败 , 如果先手先拿走 \((x,y)\) 必败 , 如果不拿走 , \(G-(x,y)\) 部分上先手不可能取一条以 \(y\) 为唯一一度点的边 , 因此这部分的情况与独立的 \(G-(x,y)\) 相同 . 后手只需拿走 \((x,y)\) 然后走必胜策略 , \(G\) 也先手必败 .

    即去掉 \((x,y)\) 结果不变 .

通过这些讨论 , 发现遇到情况 3 就必胜了 , 所以双方一定避免自己操作后产生情况 3 . 同时其余情况下可以去掉一些点而情况不变 .

考虑仙人掌上的一个链 , 必然是环与链交替 ( \(-O-O-O-O-O-\) ) 形态的 .

分别讨论 .

对于一段链 , 如果其长度 $\le 3 $ 可以在中间操作一次 , 然后去掉一度点 , 两端变独立 .

否则长度 \(\ge 4\) , 只要操作就好产生情况 3 , 因此无法操作 , 两端独立 .

对于一个环 , 如果存在一侧长 \(\le 3\) , 可以操作一次 , 因为总长 \(\ge 5\) 另一侧必然 \(\ge 2\) , 操作一次后就会产生 \(\ge 4\) 的链, 两端就变独立了 .

否则只要操作就产生情况 3 , 无法操作 , 两端独立 .

因此我们要计算若干个独立游戏复合结果 , 使用 SG 函数 .

注意一个独立且当前不可再分的整体 , 其内部必然是若干个 \(\le 3\) 链和 $\le 3 $ 环构成 , 但是两端分为不可操作环和可操作环两种情况 . 因此要分 3 种情况 dp .

可以 \(O(n^2)\) 推出 SG 函数 , 然后在圆方树上 dfs 一遍拼出答案 .

通过观察 , 得到的 SG 函数是有周期的 , 因此可以做到 \(O(n)\) .

H.Can I Complete 85km?

简单且唐氏的方法 : 随机 \(1e6\) 次 .

正经方法 : 设 \(f_i\) 表示第 \(i\) 天的概率密度函数 , 直接分段函数积分就好了 , 直接积复杂度是 \(O(n^3)\) .

更快的正经方法 : 可以理解成求高维立方体和高位直角锥体的交 , 可以用容斥 \(O(n)\) 解决 .

I.Complex Morse Code

简单的dp即可 .

J.Commercial Center

有趣的构造题 .

基本思路是让实际上合法的点尽可能少 , 同时前半部分被排除后剩的大出度点尽可能多 .

先设计一个构造 \(n\) 个点全合法图 \(G_n\) 的方法 . 发现三个全合法图连一个环 , 就可以构造一个更大的全合法图 , 同时一个点本身也是合法图 , 所以可以构造出任意奇数大小合法图 .

然后考虑在一个合法图 \(G\) 基础上 , 加一个点 \(x\), 使得 \(x\) 才是真正的合法点 , 而 \(G\) 上的点变不合法 .

如果直接用 \(x\) 全部排除了 \(G\) , 说明要连 \(x\to G\) , 这样整个 \(G\) 会在第一步直接排掉 . 因此只能排除 \(G\) 的一部分 , 把 \(G\) 拆分成三个合法子图 \(C\to B \to A \to C\) , 为了 \(x\) 能到达 \(G\) 中的点 , 至少要连向其中两个 , 不妨连 \(x\to B,x\to C\) , 则连 \(A\to C\) , 发现 \(C\) 这样无法两步到达 \(x\) .

为了让 \(A,B\) 也不合法 , 再加入 \(y,z\) , 类似地排除掉 \(A,B\) , 并且在 \(x,y,z\) 间连环就可以保证 \(x,y,z\) 是合法点 .

接下来需要保证尽可能少排除 \(A,B,C\) 中点 . 尝试牺牲其中一块使它 , 不妨牺牲 \(C\) , 那么需要保证 \(y,z\) 没有在前半部分被选到 .需要让 \(y,z\) 入度大一些 . 于是构造 \(A=3,B=n/2,C=n/2\) , 保证有一个较大的 \(B\) 仍然存留 . 由于 \(B\) 内一个点期望的入度是 \(\frac{B}{2}\) , 同时期望取到一个合法点之前取得点数为 \(\frac{n-C}{4}\) . 因此这时的答案已经足够大了 .

注意到牺牲的 \(C\) 可以适当调小 , 仍然能保证 \(y,z\) 不被选到 . 稍微按照这个方向调参就可以通过 .

恰好保证 \(y,z\) 不能选到的一组大小为 \(A=3,B=699,C=295\) , 此时期望为 \(62574\) , 调参还是相对宽松的 .

K.Light up the Statues

先考虑最简单的情况 , \(w_0=0\) 且只有一种魔力 .

我们发现每个雕像有两种点亮的方式 , 一种是在这个位置祈祷 , 花费 \(p_i\) , 一种是连在前一个位置上 , 花费到上一个位置的距离 \(d\times 2w_c\) , 一种是连在后一个位置上 .

如果把 \(p_i\) 视作根节点 , 到位置 \(i\) 的边长为 \(p_i\) , 相邻位置的边权为 \(d\times 2w_c\) , 这相当于一个最小生成树问题 , 可以用消圈法求解 , 即每加入一条新边 , 就把构成的环上最大的边删去 . 一直维护当前点一直到上一个祈祷位置上最大的边 , 每次新加入一个点 , 同时把 \(p_i\) 和 \(d\times 2w_c\) 两条边加入 , 就会成一个环 , 然后再删掉环上的最大边 .

考虑加入多种魔力 , 问题没有本质区别 , 只是对每种魔力分别维护 .

考虑带上 \(w_0\) . 注意到 \(w_0\) 走的总距离是各种魔力共享的 , 对于一种方案 , 设最左的祈祷位置是 \(l\) , 最右的祈祷位置是 \(r\) , 那么贡献就是 \(w_0\times (r-l+1)\) .

考虑扫描线右端点 \(r\) , 维护所有 \(l\) 对应的答案 , \(r\) 右侧的一定连在对应魔力最靠右的位置上 , 右移 \(r\) 时贡献的变换可以简单计算 . 问题在于处理加入 \(r\) 时的消圈 .

注意到消圈存在两种情况 , 一种是新加入的 \(p_r\) 被去掉了 , 这种情况下相当于在维护的边集上加入了 \(d\times2w_c\) ; 另一种是保留了新加入的 \(p_r\) , 这种情况相当于清空了边集 , 并加入 \(p_r\) .

发现 \(l\) 越小 , 维护的边集最大值必然越小 , 否则会被后面插入的 \(p_i\) 破掉 .

因此每次必然对 \(l\) 的一个后缀加入 \(p_r\) , 并且加入之后它们维护的边集是相同的 , 可以合并成一段 , 总共 \(O(n)\) 次合并 , 因此可以直接合并并计算答案的变化 .

对每种颜色单独维护 , 用一个线段树维护答案值 , 复杂度 \(O(n\log n)\) .

L.Yet Another World Finals

签到题 .

每次直接找一个 "iy" 并替换 , 每次长度减少 \(1\) , 总复杂度 \(O(n^2)\) .

posted @ 2025-06-12 17:21  youlv  阅读(152)  评论(0)    收藏  举报