But life goes on

最终还是回归了这个博本身的用途

9.26 ICPC 2022 南京

A

分别考虑走出边界的袋鼠和掉进洞的袋鼠:

可以发现,没有洞时走出边界的袋鼠,有洞时要么走出边界要么掉进洞,不可能留存,

则此时只需要考虑没有洞时不会走出边界的袋鼠,可以发现它们一定形成一个矩形 \(R\),

再考虑掉进洞的袋鼠,不妨把袋鼠移动改为洞移动,每次吃掉移动到的格的袋鼠,

则对于每个位置 \((i,j)\),留存下来的袋鼠就是洞吃完袋鼠后 \(R\) 内的袋鼠,

不妨把坐标原点平移到洞的位置,则只需对每个位置求出平移后的 \(R\) 内的袋鼠个数,二维前缀和维护即可。

B

可以对每个前后缀跑出答案 \(f_i,g_i\),则钦定 \(p\) 必选时答案即 \(a_p+f_{p-1}+g_{p+1}\),

修改时,可以发现 \([p,p+k-1]\) 中至少要选一个位置,

暴力算一下这段区间里的 \(f_i,g_i\),然后枚举钦定必选的位置算答案即可。

C

TBA

D

直接枚举加在哪就是双 log。。。

当然你还可以二分答案 \(w\),然后对每个条件 \(a_i\ge w\) 有一个形如首项位置 \(s\in[l,r]\) 的限制,

只需要取一个 \(s\) 满足至少 \(k\) 个限制,差分一下,检查是否存在点被至少 \(k\) 个区间包含即可。

E

赛时写挂树上倍增了。。。痛失 9 题

显然每层是独立的,考虑算深度为 \(D\) 的一层的答案,考虑树上 DP,

设 \(f_u\) 表示染完 \(u\) 子树内深度为 \(D\) 的点的最小代价,则 \(f_u=\min(a_{D-d_u},\sum f_v)\),

然后你把深度为 \(D\) 的点拿出来建虚树就做完了。。。

F

TBA,大概能构造了,但是这题真的是给人类写的吗

G

可以发现答案只跟 1 操作和 -1 操作的次数有关,枚举 0 操作有几次 1 有几次 -1 即可。

H

什么叫我们队场上拿下唯一通过了???

设 \(f_{u,k}\) 表示 \(u\) 子树内选 \(k\) 个的答案,则有转移 \(f_{u,i+j}\gets f_{u,i}+f_{v,j}+j(n-j)w(u,v)\),

可以发现这是一个 \((\min,+)\) 卷积而且显然有凸性,考虑闵可夫斯基和,

用平衡树维护差分序列,加 \(j(n-j)w(u,v)\) 相当于在差分序列上加等差数列,打 tag 即可,

然后启发式合并一下就可以做闵可夫斯基和了。

I

绝世好题之求 \(n-\) 众数出现次数

J

考虑图的形态,可以发现其实就是把 \(i-a_i\) 相同的点连成完全图,并且把 \(i+a_i\) 相同的点连成完全图,

建立以每个 \(i-a_i\) 相同的团为左部点集,每个 \(i+a_i\) 相同的团为右部点集,每个点 \(i\) 为连接 \(i-a_i\) 的团与 \(i+a_i\) 的团的边的二分图,

则原图上的匹配即为这个二分图上一条长度为 \(2\) 的链,问题转化为把二分图的边集划分为若干条长度为 \(2\) 的链,在 DFS 树上贪心匹配即可。

K

TBA

L

TBA

M

sb 计算几何,你就把每个凹形拆了就行了,注意判天花板还是地板

9.27 ICPC 2024 南京

A

TBA

B

首先每次操作必定删掉一个奇数位的 \(0\)、一个偶数位的 \(0\) 或一个奇数位的 \(1\)、一个偶数位的 \(1\),

而最终剩下的一定是 \(0101\dots\) 或 \(1010\dots\),也就是说只会剩下奇数位的 \(0\) 和偶数位的 \(1\)(记为集合 \(A\))或奇数位的 \(1\) 和偶数位的 \(0\)(记为集合 B),

并且 \(A,B\) 都非空时一定还可以操作使 \(A,B\) 的大小都减一,所以最终剩下的字符个数为 \(||A|-|B||\),

把 \(2\) 的位置补给 \(A,B\) 最小化 \(||A|-|B||\) 即可。

C

TBA

D

TBA

E

复制一份接在后面直接匹配即可。。。

F

可以发现点数和坐地铁的边数都是线性的,只有换乘的边数过于巨大,

考虑模拟 Dijkstra,每次松弛 \(u\) 站上点 \(t_1\) 的换乘时,暂时先只把最短路最小的一个换乘 \(t_2\) 入队,

而其他换乘可以在 \(t_2\) 出队后再考虑,则松弛 \(t_2\) 的换乘时需要多考虑 \(t_1\) 的换乘,把最短路最小的一个换乘 \(t_3\) 入队,

如此操作,使每个站上都只有至多一个换乘在队中,

每次松弛 \(u\) 上的换乘时考虑 \(u\) 上已确定最短路的所有换乘,把剩下的最短路最小的一个换乘入队即可。

在每个站 \(u\) 上维护一棵李超树,维护这个过程即可。

G

TBA

H

先考虑回文串怎么做,

可以发现,不是所有字符都一样时可以每次 3 操作选择长度为 \(|S|-1\) 的前缀再 1 操作删开头,

直到所有字符都一样时一直 3 操作选择长度为 \(|S|-1\) 的前缀即可,这样显然是最优的。

不是回文串时,可以发现每次 3 操作一定选择最长的一个前缀,满足其反串也在串中出现,

这样我们就可以先做 2 操作删结尾,删到反串是后缀时做这个 3 操作即可,

但是不一定开局就进行这个过程,我们可以先做若干次 1 操作删开头再进行这个过程,

枚举开局做了几次 1 操作,然后到达回文串之前每次 3 操作至少让串长缩短一半,

所以用 SAM + 主席树合并维护 endpos 暴力维护这个过程就可以做到 \(O(\log^3 n)\),

剩下的回文串的答案可以用 PAM 维护,总复杂度 \(O(n\log^3 n)\),不好说能不能过。

考虑这个过程到底经过了哪些串,设做完开局的 1 操作后串为 \(T\),则最后到达的回文串必定是 \(T\) 的最长回文前缀 \(P\),

而上一步到达的串 \(Q\) 必定截止到 \(P\) 的下一次出现,再上一步到达的串 \(R\) 必定截止到 \(Q\) 反串的下一次出现,

以此法倒着模拟这个过程,可以省去二分【最长的一个前缀,满足其反串也在串中出现】的复杂度,

总复杂度 \(O(n\log^2 n)\) 可以通过。

I

bingo integer 显然就是 \(\min\{\min\limits_{i=1}^n\max\limits_{j=1}^m a_{i,j},\min\limits_{i=1}^m\max\limits_{j=1}^n a_{j,i}\}\),

考虑 bingo integer \(\ge k\) 的方案数,即 \(\forall i\in[1,n],\max\limits_{j=1}^m a_{i,j}\ge k,\forall i\in[1,m],\max\limits_{j=1}^n a_{j,i}\ge k\) 的方案数,

也就是每行每列都至少有一个 \(\ge k\) 的数的方案数。设 \(\ge k\) 的数有 \(c_k\) 个。

考虑容斥,钦定 \(i\) 行 \(j\) 列不能放 \(\ge k\) 的数的方案数为 \((nm-c_k)!{n\choose i}{m\choose j}((n-i)(m-j))^{\underline{c_k}}\),

则每行每列都至少有一个 \(\ge k\) 的数的方案数为 \((nm-c_k)!\sum\limits_{i=1}^n\sum\limits_{j=1}^m(-1)^{n-i+m-j}{n\choose i}{m\choose j}(ij)^{\underline{c_k}}\),

对每个 \(c_k\) 算一遍这个,总复杂度 \(O(n^2m^2)\),无法通过。

可以发现,原式可以写成差卷积:

\[\begin{aligned} &(nm-c_k)!\sum\limits_{i=1}^n\sum\limits_{j=1}^m(-1)^{n-i+m-j}{n\choose i}{m\choose j}{ij\choose c_k}\\ =&(nm-c_k)!\sum\limits_{p=1}^{nm}\left(p!\sum\limits_{ij=p}(-1)^{n-i+m-j}{n\choose i}{m\choose j}\right)\dfrac 1{(p-c_k)!} \end{aligned} \]

FFT 即可,总复杂度 \(O(nm\log(nm))\)。

J

TBA

K

TBA

L

TBA

M

TBA

posted @ 2026-09-26 19:24  Sk_sync_closer  阅读(20)  评论(0)    收藏  举报