JOIST2024 传统题记录

D1T1 Fish 3

第二个修改实际上就是要求一类操作完后序列不减。

\(B_i=\lfloor\frac{C_i}{D}\rfloor\),那么我们每次可以把 \(B_i\)\(1\)\(C_i\le C_{i+1}\) 根据 \(C_i\bmod D\)\(C_{i+1}\bmod D\) 的大小关系约束了 \(B_i\le B_{i+1}\) 或者 \(B_i<B_{i+1}\)

这个东西可以用单侧递归的方式维护。具体地,对于每个区间 \([L,R]\),记录 \(val\)\(B_{r+1}=+\infty\) 时,\(B_l\) 的值。然后记 \(lim\) 为最小的 \(B_{r+1}\),使此时 \(B_l\) 仍然等于 \(val\)

\(lim\)\(val\) 是好预处理的,那么不难做到 \(O(q\log^2n)\)

https://atcoder.jp/contests/joisp2024/submissions/70637594

D1T2 Ski 2

如果我们已知了最终每个点的高度和新增度数,那么可以找出匹配的充要条件就是对于任意高度 \(H\),高度 \(<H\) 的新增度数不小于高度 \(=H\) 的点数。这里我们认为在高度为 \(-\infty\) 处存在一个新增的度数。

一个 dp 的想法是把所有点从低往高推,但是我们并不知道当前哪些点会从 \(H\) 推到 \(H+1\)

注意到,如果一个点 \(p\),其 \(c_p\) 是高度 \(\le H\) 中的最小值,那么 \(p\) 是不会从 \(H\) 推到 \(H+1\) 的。这个可以用调整说明。而此时如果高度 \(\le H\) 需要新增度数,那么一定是使用 \(c_p\) 增加。

那么向上推的点就不重要了,考虑 \(f_{H,c,d}\) 为当前有 \(c\) 个点要从 \(H\) 推到 \(H+1\),且已确定的点的新增度数和为 \(d\)

转移就是 \(f_{H,c,d}+t\times mn_{H+1}\to f_{H+1,c+cnt_{H+1}-d,d+t}\),其中 \(t\) 为在 \(H+1\) 新增的入度,\(cnt_{H+1}\)\(H+1\) 处的点数。直接做不难 \(O(n^2V)\)

观察到有用的 \(H\) 实际上是少的,从小往大扫维护变量 \(c\),在 \(H\)\(c\leftarrow \max(c+cnt_H-1,0)\),那么只有 \(c>0\)\(H\) 有用,这只有 \(O(n)\) 个。

于是总复杂度 \(O(n^3)\)

https://atcoder.jp/contests/joisp2024/submissions/70646953

D2T1 Board Game

观察到,对于 \(2\sim K\),起点为 \(x\),每个人只有两类方案行走:

  • 走到最近点 \(p\),然后每次 \(p\to q\to p\),需要 \(p\) 为停止节点。

  • 走到某一个点 \(u\),然后每次 \(u\to v\)\(v\to u\),需要 \(u,v\) 均为停止节点。

不妨设两类方案随时间代价为 \(A_x+2t\)\(B_x+t\)

需要注意的是第二类有轮数的下界,但是其实我们可以忽略这个下界,把它看成一条直线。因为第一类的 \(A_x\) 是最短路,并且之后每次 \(+2\)。容易发现第二类走到 \(u\) 无论如何代价会不低于第一类的代价,因此对于第二类方案的任意一种可能,其射线都会和第一类有交。

考虑怎么求 \(A,B\)\(A\) 是容易的,多源 BFS 即可。对于 \(B\),我们实际上想要最小化的是步数减轮数的差,那么可以把停止节点走出去的边权值设为 \(0\),其它边还是 \(1\),BFS 的结果就是 \(B_x\)

当我们知道了 \(A,B\),对于时间 \(t\)\(2\sim K\) 的代价是一个分段函数。枚举每一段 \(kx+b\),那么对于 \(1\),每走一轮就要消耗 \(k\) 的代价。这个的建图和上面同理,停止节点连出去的边设为 \(1+k\) 即可。复杂度 \(O(K(n+m))\)

现在我们解决了 \(K\) 较小的情况。对于 \(K\) 较大的时候,感觉上多走一轮的代价是大的。具体地,我们有两个极端情况:\(x_1\to T\) 最小化轮数 和 最小化步数。两者之间对 \(1\) 的代价只减少了 \(O(n)\),而每多一轮代价就会增加 \(O(K)\)。因此在最小轮数的基础上,我们只会多走 \(O(\frac{n}{K})\) 轮。

那么只要求出 \(x_1\to T\) 在多走 \(0\sim O(\frac{n}{K})\) 步的代价即可。这个可以分层图 BFS,复杂度 \(O(\frac{n}{K}(n+m))\)

于是可以根号平衡到 \(O((n+m)\sqrt{n})\)

https://atcoder.jp/contests/joisp2024/submissions/70681038

D2T3 Growing Vegetables is Fun 5

对于 \(1\le i\le n\)\(x_i=A_i\)\(y_i=A_{2n+1-i}\)。那么选取一个区间就是选 \(x\)\(y\) 的各一个后缀归并。

二分答案,顺序枚举 \(x\) 的后缀长度。对于一个位置 \(p\),归并后的第 \(p\) 个位置是先增后减的,那么合法的是 \(O(1)\) 个区间,差分即可。

https://atcoder.jp/contests/joisp2024/submissions/70701618

D3T1 Card Collection

还不会。

D3T3 Tower

不妨认为我们是尽量贪心地跳 \(+D\),那么如果某一次选择了 \(+1\) 就一定是为了 \(+D\) 跳到某个 \(R_i+1\)

考虑 dp,\(f_i\) 表示 \(0\to R_i+1\) 的最小代价。

先考虑怎么求答案。观察到答案的形态一定是从某个 \(R_i+1\),跳尽量多的 \(+D\),最后剩下的部分再用 \(+1\) 去走。

考虑动态维护 \(g_{i,r}\),表示当前在的 \(p\)\(\ge R_i+1\) 的第一个 \(\bmod D=r\) 的位置,通过某个 \(R_j+1\)\(p\) 的最小代价。那么查询就是若干次区间 \(\min\left\{g_{i,j}-j\times A\right\}\)

对于 \(f\) 的转移,注意到最后一步肯定是 \(R_i+1-D\to R_i+1\),那么把 \(R_i+1-D\) 也当成一个询问插回去即可。

https://atcoder.jp/contests/joisp2024/submissions/70752927

D4T1 Escape Route 2

对于一个点,其下一步实际上是确定的。对于查询直接倍增是 \(\min(siz_l,siz_r)\times \log N\),记忆化一下就可以 \(O(N\sqrt{N}\log{N})\),卡卡常能过。

https://atcoder.jp/contests/joisp2024/submissions/70805987

D4T3 Table Tennis

竞赛图的三元环个数是 \(\binom{n}{3}-\sum\binom{out_i}{2}\),证明是非三元环恰有一个点 \(out=2\)

那么题目约束了 \(\sum\binom{out_i}{2}\),考虑先找出一组合法的 \(out\)

对于一个 \(out\) 序列,其合法的条件是升序的前缀和 \(s_i\ge \binom{i}{2}\)

考虑调整,初始令 \(out\) 初值尽量相等,每次找到一对 \((i,j)\) 尽量多调整,直到某一个取到上界或剩余的和已经不够调整。

这样直接实现可以通过,感觉上调整的轮数是 \(O(n)\) 的。因为每次要么把某一个 \(deg\) 直接取满,不够调整时剩下的 \(\sum\binom{out_i}{2}\) 就是 \(O(n)\) 的。

https://atcoder.jp/contests/joisp2024/submissions/70844770

posted @ 2025-11-24 20:15  CJzdc  阅读(17)  评论(0)    收藏  举报