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)\),无法通过。
可以发现,原式可以写成差卷积:
FFT 即可,总复杂度 \(O(nm\log(nm))\)。
J
TBA
K
TBA
L
TBA
M
TBA

浙公网安备 33010602011771号