pht春6
A
神秘的我是在21年做的,过于久远,不想追踪
显然一个人第一步向右,最后一步向下。另一个人第一步向下,最后一步向右
假设可以求随便走的方案。然后减去相遇的方案。
假设相遇,在第一次相遇的时候交互这两个东西
再减去终点相遇的情况
B
23年做的题。
b , c b,c b,c 最大值分别在1、 n n n 处取得。所以令 b 1 , c n b_1,c_n b1,cn 尽量小即可。
二分答案是 V V V。那显然令 b 1 = V b_1=V b1=V,那样 c 1 c_1 c1 就能尽量小。 c 1 c_1 c1 确定的。
考虑 a 2 a_2 a2 和 a 1 a_1 a1 关系
-
d = 0 d=0 d=0,不变
-
d > 0 d>0 d>0,要么 c c c 变大, b b b 变小。要么 c c c 更大然后 b b b 变小。
我们肯定选择第一种情况。
-
d < 0 d<0 d<0,同理,我们肯定选择 c c c 不变, b b b 下降。
因此,对于确定 b 1 b_1 b1, c n c_n cn 是一个关于 { a i + 1 − a i } \{a_{i+1}-a_i\} {ai+1−ai} 的表达式。
因此我们就可以二分 V V V,然后计算 c n c_n cn 是否满足条件。
而现在 c n = f ( V , d ) c_n=f(V,d) cn=f(V,d),每次修改只改一下 d d d,然后可以维护 c n c_n cn 的表达式。
只有 d > 0 d>0 d>0 的地方 c c c 才会变,所以 f ( V , d ) = a 1 − V + ∑ d i > 0 ∣ d i ∣ f(V,d)=a_1-V+\sum_{d_i>0}|d_i| f(V,d)=a1−V+∑di>0∣di∣
C
很熟悉。
一个单调不降,一个单调不升。
会不会就是可以前缀加,后缀加,然后使所有数的大小相等。使这个数最小。
盲猜 c c c 满足式子。 a a a 变大只有 b b b 会变,否则只有 c c c 会变。
假设知道 b 1 b_1 b1,就可以求出 c n c_n cn。
考虑先枚举 b 1 b_1 b1
然后不是求最值,不能二分,因此考虑三分 b 1 b_1 b1 的值。
为什么 a i a_i ai 变时就只有一个变。
我们现在相当于求 ∑ ( ∣ b i ∣ + ∣ − c i ∣ ) \sum (|b_i|+|-c_i|) ∑(∣bi∣+∣−ci∣)
则 a i = b i − ( − c i ) a_i=b_i-(-c_i) ai=bi−(−ci)
不妨令 d i = − c i d_i=-c_i di=−ci
则 b i − d i = a i b_i-d_i=a_i bi−di=ai
相当于两条链用绳子连起来。保证两个都是递增的就可以了。
而同时有 ∑ ( ∣ b i ∣ + ∣ d i ∣ ) \sum(|b_i|+|d_i|) ∑(∣bi∣+∣di∣) 尽量小。
假设形状固定,那样子靠近 x x x 轴附近会尽量小。
希望极差尽量小,所以要么 b b b 变,要么 d d d 变。
因此对于一个固定的序列,直接从前往后遍历,然后反悔贪心,每个物品只可能由选变成不选。
为什么可以三分。
b i = b 0 + ∑ δ > 0 d i b_i=b_0+\sum _{\delta>0}d_i bi=b0+∑δ>0di
c i = a i − b 0 + ∑ δ < 0 ( − d i ) c_i=a_i-b_0+\sum _{\delta<0}(-d_i) ci=ai−b0+∑δ<0(−di)
对于每个函数都是一个绝对值函数,也就是一个凸的函数,所有加起来还是一个凸的,所以可以三分。
本质是找一个点到。
图形框架是确定的,因此知道相对关系,那令这些数的中位数为0即可。
D
对于一个牌堆,先手的合法取法是对于任意一个前缀最多取 n + 1 2 \frac{n+1}2 2n+1 个。
发现上界是所有最大值(那 n 2 \frac n 2 2n 张牌)
然后发现上界可以取得
把关心的牌设为+1,不关心设为-1.
有这么一个结论,一定存在一个圆排列中的循环排列,一定可以满足括号匹配。
证明,把最小的前缀和shift到后面去。首先后面那些数的前缀和肯定大于等于0。而对于这个前缀的任意一个前缀都大于这个前缀的末尾,因此整个都是大于等于0的。
因此此题就很好做的了。
我们就找到那个前缀和<=0的循环排列,移到后面就行。
E
先考虑最多多少次。
事实上最多只需要2次。
0次很容易check。
2次怎么做,先翻转前缀 [ 1 , k ] [1,k] [1,k],然后翻转 [ k + 1 , n ] [k+1,n] [k+1,n]
比如 abcdef
然后变成 dcbafe
,相当于变成一个类似的循环排列。
现在等价于问是否能只用一次完成。
现在假设把左为+1,右为-1,则假设设翻转 [ L , R ] [L,R] [L,R],则 L L L 不能晚于第一次0的地方。那么在所有大于等于0的部分,显然选前缀最大的那个位置来翻,因此对后面更充足。
而 R R R 也是一样的。
F
对每个数-1。满足任意前缀 ≥ 0 \ge 0 ≥0 即可。
补充E和D的推论:
推论1:
对于任意一个 n n n ±1 的序列,一定存在一个循环排列,使得前缀和均大于0.
更强推论2:
n + 1 n+1 n+1 个+1 和 n n n 个-1,则仅存在一个是大于0的
更强推论3:
满足 ∑ a i = 1 \sum a_i=1 ∑ai=1 即可
构造方法:找最后一个最低点。
首先全部-1,则 ∑ a i = − 1 \sum a_i=-1 ∑ai=−1。
也就是任意后缀<=-1,而这样的排列只有1个。
总共有 ( m + 1 ) ! (m+1)! (m+1)! 种,而对于每种只有一个,所以理论上是 m ! m! m!。但是要求某张牌在最后。其特点是 w i = − 1 w_i=-1 wi=−1,而只有这张才是特殊的。
因此答案是 m ! m + 1 − n \frac{m!}{m+1-n} m+1−nm!
其中 m + 1 − n m+1-n m+1−n 就是特殊牌。
G
分两步:
- 枚举差分总和 2 i 2i 2i
- 枚举转折 k k k 次
这样子对答案的贡献是多少呢?
把差分拎出来:
- ∑ d i = 0 \sum d_i=0 ∑di=0
这样子不太好做,但如果:
- ∑ d i = + − 1 \sum d_i=+-1 ∑di=+−1
那样子是好做的,相当于圆排列个数
相当于:
- 变化为 2 i 2i 2i
- 转折 k k k 次
- 全部 ≥ 0 \ge 0 ≥0
- 总和 = 0 =0 =0
先补个1,那样子满足124是容易算的,就是把 i i i 个元素插成 k k k 份,就是 ( i − 1 k − 1 ) ( i k − 1 ) \binom{i-1}{k-1}\binom{i}{k-1} (k−1i−1)(k−1i)
但如果满足1234,则是 ( i − 1 k − 1 ) ( i k − 1 ) 1 k \binom{i-1}{k-1}\binom{i}{k-1}\frac{1}k (k−1i−1)(k−1i)k1
前面视为向下,后面视为向上。想象起始节点只有 1 k \frac{1}{k} k1 是等概率的。
这样子两个都枚举了。
我们要把 k k k 次向上和 k k k 次向下的 2 i 2i 2i 个元素分配到 n n n 个格子里,且没有一个格子同时有向上和向下的元素。
如果不关心后面那个条件,还是容易做的。插板就完了。
反过来插板。
一共有 n n n 个元素,那就有 n − 1 n-1 n−1 个板,放在排列的地方。然后交界处至少有一块板,其他位置可以有任意多块板。
则总方案数是:
t = n − 1 − ( 2 k − 1 ) t=n-1-(2k-1) t=n−1−(2k−1) 块板塞到 2 i + 1 2i+1 2i+1 个位置去
还是可以算的 ( n − 2 k + 2 i 2 i ) \binom{n-2k+2i}{2i} (2in−2k+2i)
再乘回前面,我们要求的是:
∑ 1 ≤ i ≤ m ∑ k ≤ i ( n − 2 k + 2 i 2 i ) ( i − 1 k − 1 ) ( i k − 1 ) 1 k \sum_{1\le i\le m}\sum_{k\le i}\binom{n-2k+2i}{2i}\binom{i-1}{k-1}\binom{i}{k-1}\frac 1 k 1≤i≤m∑k≤i∑(2in−2k+2i)(k−1i−1)(k−1i)k1
大致可以拆成 f ( i ) g ( k ) h ( i − k ) f(i)g(k)h(i-k) f(i)g(k)h(i−k),后面的卷一下就行。
H
和上一题一样的。
从另一个角度来思考这个问题。
假设分成两个操作来做。
前缀变成 b i b_i bi,后缀变成 c i c_i ci
我们发现 b i b_i bi 递减, c i c_i ci 递增。
且 b i , c i b_i,c_i bi,ci 不同时变化。(因为如果同时变化拆出来的方案就不是唯一的了)
拆完之后,问的其实是:
有多少种不同的 b , c b,c b,c 满足:
- b b b 递减
- c c c 递增
- b i + c i ≤ M b_i+c_i\le M bi+ci≤M
- b i , c i b_i,c_i bi,ci 不同时变化
令 b 0 = a 0 = M , c 0 = 0 b_0=a_0=M,c_0=0 b0=a0=M,c0=0。
同时 a n + 1 = c n + 1 = M a_{n+1}=c_{n+1}=M an+1=cn+1=M
这个东西有个技巧,移项:
c i ≥ M − b i = d i c_i\ge M - b_i = d_i ci≥M−bi=di
现在相当于是:
c i , d i c_i,d_i ci,di 是递增的。
等价于问大家都从0开始增,最后都增到 M M M,有多少种方案满足: c i ≤ d i c_i\le d_i ci≤di 恒成立。
此时变成了第一题。
但是还有不同时变化这个限制。
通过容斥钦定在某些时候同时变化消去影响。
-1+2-3+4……
假设 f ( n , m ) f(n,m) f(n,m) 描述的是 [ 0 , 0 ] [0,0] [0,0] 到 [ n , m ] [n,m] [n,m] 的方案数,则答案是:
a n s = f ( n , m ) − ( n 1 ) f ( n , m − 1 ) + ( n 2 ) f ( n , m − 2 ) + … ans=f(n,m)-\binom{n }{1}f(n,m-1)+\binom{n }{2}f(n,m-2)+\dots ans=f(n,m)−(1n)f(n,m−1)+(2n)f(n,m−2)+…
也就是:
a n s = ∑ i ( − 1 ) i + 1 ( n i ) f ( n , m − i ) ans=\sum_i(-1)^{i+1}\binom n if(n,m-i) ans=∑i(−1)i+1(in)f(n,m−i)
组合数求的就是哪 i i i 列同时变,那就提前给那些位置填个1.
在第一题中,是不能相遇。现在是不能超过。所以要对其中一条曲线进行平移。
而 f ( n , m ) f(n,m) f(n,m) 可以用类似第一题的做法。
I
又是一个贪心,那要怎么贪。
考虑这个代价指的是什么。
相当于是 a i a_i ai 的面积,而这个 a i a_i ai 的形状就是金字塔形状。
盲猜下界是否能取得 b i b_i bi,然后样例2hack掉了。
相当于找到一个 a a a 数组,完全包含 b b b 数组,求这个大的部分是多少。
相当于问:
-
怎样的 a a a 数组是合法的?
-
b b b 怎样向上填充最小的 a a a?
这样的 a a a 是怎样的:相邻的差分值之和小于等于最大值乘2.
那就是 ∑ ∣ a i − a i + 1 ∣ ≤ 2 M \sum |a_i-a_{i+1}|\le 2M ∑∣ai−ai+1∣≤2M
现在要调整 b b b 了。
首先如果 ∑ ∣ b i − b i + 1 ∣ ≤ 2 M \sum |b_i-b_{i+1}|\le 2M ∑∣bi−bi+1∣≤2M 已经合法了。
考虑一个凹下去的地方,有用只能是让他们同时+1,然后使差分向下变2
而我们只需要调整一个谷底就行。
也就是每次选择一个谷底向上调整,就可以-2了。
选最短的谷底最好。