2024 年 syzx 春季训练 6

· · 个人记录

A: cf348d

简单容斥

一个非常经典的套路了,答案等于 f(1,2,n-1,m) \times f(2,1,n,m-1) - f(1,2,n,m-1) \times f(2,1,n-1,m)
其中 f(i,j,x,y) 表示从 (i,j)(x,y) 的方案数。

B: cf1406d

贪心

等价于最小化 b_1c_n

不妨令 d_i = -c_i,则有 b_i - d_i = a_ibd 都是上升的。 对于任意一组解 \{b\}\{d\},我们显然可以整体上下平移,使得答案发生变化,为了使得答案尽量小,我们其实希望平移后图像尽量接近 Y=0 的轴线。

并且我们会希望极差尽量小,所以 b_id_i 不会同时发生变化。

那么变化情况同 B 种讨论一样,我们三分一下 b_1 即可。

D: arc138c

贪心

我们假设小于中位数的某个 A_i 上面有个 +1,大于中位数的上面有个 -1,那么所有的循环位移里面必然有个 k 满足任意的前缀都不小于 0,接下来的事情就容易了:

E: cf1685c

贪心

首先有结论,一定可以通过 2 次操作使得括号平衡

这样的效果相当于整串反转以后,循环右移了恰好 k 个单位的效果。
而根据前一题,我们已经知道一定有一个循环右移是满足括号匹配的。

所以只需要检查是否可以通过少于 2 次完成。
0 的情况是容易的,考虑 1 的情况:

F: P6672

计数

经过前 2 题我们已经知道了:恰好有 n+1n-1 的序列里,必定存在某个循环排列是满足(括号匹配)前缀和均大于等于 0 的

事实上,这个结论还可以更强:\sum{a_i}=1的序列 a[] 满足恰好仅有一个循环排列是满足前缀和均是大于 0

包括最后一张卡牌在内,我们令 a_i = w_i-1,则现在 (\sum_{1<=i<=m+1}{a_i})=-1
我们发现只要对于 i <= m 的任意时候前缀和大于等于 0,则表示可以往后至少抽一张卡。
前缀和大于等于 0,显然等价于后缀和小于 0。
根据最前面的结论,我们知道这样的组合数等于圆排列的个数(因为任意一个排列都仅有一个循环排列满足):m!
由于最后一张卡牌必须是所有 a_i=-1 的牌里面的某(特定)一张,所以 ans = \frac{m!}{m-n+1},其中 n 是有特殊过牌能力的卡牌。

G: qoj7632

计数

s_i 表示合法的一组结果。
我们增加 s_0=ms_{n+1}=m 的头尾两个元素。
s_i 应该满足 \sum{|s_i-s_{i-1}| <= 2m}
考虑这样一个 +1/-1 序列 a[]

a[] 的长度应当小于 2m
考虑某个位置 a_i = +1a_{i+1} = -1,我们说这里发生了一个转折,每一个转折位置的左右两个元素必然属于两个不同的 s_x(但是其他相邻位置同样可能属于不同的 s_y),我们其实是要用 n+1 个元素对其插板。
不妨假设 a[] 的长度是 2L(恰好有 L 个 +1 和 L 个 -1 ),且发生了 i 次转折。
则对任意满足这种转折的的 a[] 序列插板到 n+1 个元素的方案数是 \binom{n+1+2L-2i}{2L}
而给定 L,i 的合法 a[] 序列一共是 \binom{L-1}{i-1}\binom{L}{i-1}\frac{1}{i} 种,这个可以通过 Ranney 引理推导出来。

ans = 1 + \sum_{1<=L<=m}{\sum_i{\frac{1}{i}\binom{L-1}{i-1}\binom{L}{i-1}\binom{n+1+2L-2i}{2L}}},可以拆项后使用 FFT 加速。

H: qoj7632

计数

s_i 表示合法的一组结果。
我们增加 s_0=ms_{n+1}=m 的头尾两个元素。
考虑把 s[] 应当可以拆成 s_i = a_i + b_i 的形式,满足:

由于第 4 个条件的存在,不妨设 c_i = m-a_i >= b_i,则等价于统计:

如果不考虑第 3 个条件,原问题等价于统计 (0,0) 走到 (n,m) 的两条不穿越路径的方案数。
也等价于统计点 P(-1,1) 走到 (n-1,m+1) 和点 Q(0,0) 走到 (n,m) 的两条不接触路径的方案数,记作 f(n,m) = {\binom{n+m}{m}}^2-\binom{n+m}{m-1} \times \binom{n+m}{m+1}

考虑使用容斥原理,钦定中间有某 i 个下标恰好是同时变化的(此时可以看作终点变成了 (n,m-i)),则:

I: qoj8542

贪心

s_i 表示某个最终的一组结果。
我们增加 s_0=\infs_{n+1}=\inf 的头尾两个元素。
s_i 应该满足 \sum{|s_i-s_{i-1}| <= 2\inf}

最终付出的代价就是 \sum{s_i}=\sum(s_i-b_i)+\sum{b_i}

需要考虑的是怎么用最小的\sum{(s_i-b_i)}b[] 变作一个合法的 s[]

受到约束的是最终 \sum{|b_i-b_{i-1}|} 需要不超过 2\inf,考虑最小的一段连续的 b_i

但选择最小的 b_i 未必最优,我们希望 b_i 向上调整的面积尽量小,故每次贪心选择满足 b_L < b_{L-1} \land b_R < b_{R+1}最短的一段连续相等的 [L,R],让其区间 +1,花费代价 R-L+1