24pht春6

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 关系

  1. d = 0 d=0 d=0,不变

  2. d > 0 d>0 d>0,要么 c c c 变大, b b b 变小。要么 c c c 更大然后 b b b 变小。

    我们肯定选择第一种情况。

  3. 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+1ai} 的表达式。

因此我们就可以二分 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)=a1V+di>0di

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 bidi=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=aib0+δ<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+1nm!

其中 m + 1 − n m+1-n m+1n 就是特殊牌。

G

分两步:

  1. 枚举差分总和 2 i 2i 2i
  2. 枚举转折 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} (k1i1)(k1i)

但如果满足1234,则是 ( i − 1 k − 1 ) ( i k − 1 ) 1 k \binom{i-1}{k-1}\binom{i}{k-1}\frac{1}k (k1i1)(k1i)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 n1 个板,放在排列的地方。然后交界处至少有一块板,其他位置可以有任意多块板。

则总方案数是:

t = n − 1 − ( 2 k − 1 ) t=n-1-(2k-1) t=n1(2k1) 块板塞到 2 i + 1 2i+1 2i+1 个位置去

还是可以算的 ( n − 2 k + 2 i 2 i ) \binom{n-2k+2i}{2i} (2in2k+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 1imki(2in2k+2i)(k1i1)(k1i)k1

大致可以拆成 f ( i ) g ( k ) h ( i − k ) f(i)g(k)h(i-k) f(i)g(k)h(ik),后面的卷一下就行。

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 满足:

  1. b b b 递减
  2. c c c 递增
  3. b i + c i ≤ M b_i+c_i\le M bi+ciM
  4. 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 ciMbi=di

现在相当于是:

c i , d i c_i,d_i ci,di 是递增的。

等价于问大家都从0开始增,最后都增到 M M M,有多少种方案满足: c i ≤ d i c_i\le d_i cidi 恒成立。

此时变成了第一题。

但是还有不同时变化这个限制。

通过容斥钦定在某些时候同时变化消去影响。

-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,m1)+(2n)f(n,m2)+

也就是:

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,mi)

组合数求的就是哪 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 数组,求这个大的部分是多少。

相当于问:

  1. 怎样的 a a a 数组是合法的?

  2. 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 aiai+12M

现在要调整 b b b 了。

首先如果 ∑ ∣ b i − b i + 1 ∣ ≤ 2 M \sum |b_i-b_{i+1}|\le 2M bibi+12M 已经合法了。

考虑一个凹下去的地方,有用只能是让他们同时+1,然后使差分向下变2

而我们只需要调整一个谷底就行。

也就是每次选择一个谷底向上调整,就可以-2了。

选最短的谷底最好。

  • 29
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值