24pht春6

本文搬运自本人高中时期CSDN博客,若图片加载不出来,可到原文查看:https://blog.csdn.net/zhangtingxiqwq/article/details/139125195

pht春6

A

神秘的我是在21年做的,过于久远,不想追踪


显然一个人第一步向右,最后一步向下。另一个人第一步向下,最后一步向右

假设可以求随便走的方案。然后减去相遇的方案。

假设相遇,在第一次相遇的时候交互这两个东西

再减去终点相遇的情况

B

23年做的题。


b,cb,c 最大值分别在1、 nn 处取得。所以令 b1,cnb_1,c_n 尽量小即可。

二分答案是 VV 。那显然令 b1=Vb_1=V ,那样 c1c_1 就能尽量小。 c1c_1 确定的。

考虑 a2a_2a1a_1 关系

  1. d=0d=0 ,不变

  2. d>0d>0 ,要么 cc 变大, bb 变小。要么 cc 更大然后 bb 变小。

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

  3. d<0d<0 ,同理,我们肯定选择 cc 不变, bb 下降。

因此,对于确定 b1b_1cnc_n 是一个关于 {ai+1ai}\{a_{i+1}-a_i\} 的表达式。

因此我们就可以二分 VV ,然后计算 cnc_n 是否满足条件。

而现在 cn=f(V,d)c_n=f(V,d) ,每次修改只改一下 dd ,然后可以维护 cnc_n 的表达式。

只有 d>0d>0 的地方 cc 才会变,所以 f(V,d)=a1V+di>0dif(V,d)=a_1-V+\sum_{d_i>0}|d_i|

C

很熟悉。

一个单调不降,一个单调不升。

会不会就是可以前缀加,后缀加,然后使所有数的大小相等。使这个数最小。


盲猜 cc 满足式子。 aa 变大只有 bb 会变,否则只有 cc 会变。

假设知道 b1b_1 ,就可以求出 cnc_n

考虑先枚举 b1b_1

然后不是求最值,不能二分,因此考虑三分 b1b_1 的值。

为什么 aia_i 变时就只有一个变。

我们现在相当于求 (bi+ci)\sum (|b_i|+|-c_i|)

ai=bi(ci)a_i=b_i-(-c_i)

不妨令 di=cid_i=-c_i

bidi=aib_i-d_i=a_i

相当于两条链用绳子连起来。保证两个都是递增的就可以了。

而同时有 (bi+di)\sum(|b_i|+|d_i|) 尽量小。

假设形状固定,那样子靠近 xx 轴附近会尽量小。

希望极差尽量小,所以要么 bb 变,要么 dd 变。

因此对于一个固定的序列,直接从前往后遍历,然后反悔贪心,每个物品只可能由选变成不选。

为什么可以三分。

bi=b0+δ>0dib_i=b_0+\sum _{\delta>0}d_i

ci=aib0+δ<0(di)c_i=a_i-b_0+\sum _{\delta<0}(-d_i)

对于每个函数都是一个绝对值函数,也就是一个凸的函数,所有加起来还是一个凸的,所以可以三分。

本质是找一个点到。


图形框架是确定的,因此知道相对关系,那令这些数的中位数为0即可。

D

对于一个牌堆,先手的合法取法是对于任意一个前缀最多取 n+12\frac{n+1}2 个。


发现上界是所有最大值(那 n2\frac n 2 张牌)

然后发现上界可以取得

把关心的牌设为+1,不关心设为-1.

有这么一个结论,一定存在一个圆排列中的循环排列,一定可以满足括号匹配。

证明,把最小的前缀和shift到后面去。首先后面那些数的前缀和肯定大于等于0。而对于这个前缀的任意一个前缀都大于这个前缀的末尾,因此整个都是大于等于0的。

因此此题就很好做的了。

我们就找到那个前缀和<=0的循环排列,移到后面就行。

E

先考虑最多多少次。

事实上最多只需要2次。

0次很容易check。

2次怎么做,先翻转前缀 [1,k][1,k] ,然后翻转 [k+1,n][k+1,n]

比如 abcdef 然后变成 dcbafe ,相当于变成一个类似的循环排列。

现在等价于问是否能只用一次完成。

现在假设把左为+1,右为-1,则假设设翻转 [L,R][L,R] ,则 LL 不能晚于第一次0的地方。那么在所有大于等于0的部分,显然选前缀最大的那个位置来翻,因此对后面更充足。

RR 也是一样的。

F

对每个数-1。满足任意前缀 0\ge 0 即可。


补充E和D的推论:

推论1:

对于任意一个 nn ±1 的序列,一定存在一个循环排列,使得前缀和均大于0.

更强推论2:

n+1n+1 个+1 和 nn 个-1,则仅存在 一个 是大于0的

更强推论3:

满足 ai=1\sum a_i=1 即可


构造方法:找最后一个最低点。

首先全部-1,则 ai=1\sum a_i=-1

也就是任意后缀<=-1,而这样的排列只有1个。

总共有 (m+1)!(m+1)! 种,而对于每种只有一个,所以理论上是 m!m! 。但是要求某张牌在最后。其特点是 wi=1w_i=-1 ,而只有这张才是特殊的。

因此答案是 m!m+1n\frac{m!}{m+1-n}

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

G

分两步:

  1. 枚举差分总和 2i2i

  2. 枚举转折 kk

这样子对答案的贡献是多少呢?

把差分拎出来:

  • di=0\sum d_i=0

这样子不太好做,但如果:

  • di=+1\sum d_i=+-1

那样子是好做的,相当于圆排列个数

相当于:

  • 变化为 2i2i

  • 转折 kk

  • 全部 0\ge 0

  • 总和 =0=0

先补个1,那样子满足124是容易算的,就是把 ii 个元素插成 kk 份,就是 (i1k1)(ik1)\binom{i-1}{k-1}\binom{i}{k-1}

但如果满足1234,则是 (i1k1)(ik1)1k\binom{i-1}{k-1}\binom{i}{k-1}\frac{1}k

前面视为向下,后面视为向上。想象起始节点只有 1k\frac{1}{k} 是等概率的。

这样子两个都枚举了。

我们要把 kk 次向上和 kk 次向下的 2i2i 个元素分配到 nn 个格子里,且没有一个格子同时有向上和向下的元素。

如果不关心后面那个条件,还是容易做的。插板就完了。

反过来插板。

一共有 nn 个元素,那就有 n1n-1 个板,放在排列的地方。然后交界处至少有一块板,其他位置可以有任意多块板。

则总方案数是:

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

还是可以算的 (n2k+2i2i)\binom{n-2k+2i}{2i}

再乘回前面,我们要求的是:

1imki(n2k+2i2i)(i1k1)(ik1)1k\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

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

H

和上一题一样的。

从另一个角度来思考这个问题。

假设分成两个操作来做。

前缀变成 bib_i ,后缀变成 cic_i

我们发现 bib_i 递减, cic_i 递增。

bi,cib_i,c_i 不同时变化。(因为如果同时变化拆出来的方案就不是唯一的了)

拆完之后,问的其实是:

有多少种不同的 b,cb,c 满足:

  1. bb 递减

  2. cc 递增

  3. bi+ciMb_i+c_i\le M

  4. bi,cib_i,c_i 不同时变化

b0=a0=M,c0=0b_0=a_0=M,c_0=0

同时 an+1=cn+1=Ma_{n+1}=c_{n+1}=M

这个东西有个技巧,移项:

ciMbi=dic_i\ge M - b_i = d_i

现在相当于是:

ci,dic_i,d_i 是递增的。

等价于问大家都从0开始增,最后都增到 MM ,有多少种方案满足: cidic_i\le d_i 恒成立。

此时变成了第一题。

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

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

-1+2-3+4……

假设 f(n,m)f(n,m) 描述的是 [0,0][0,0][n,m][n,m] 的方案数,则答案是:

ans=f(n,m)(n1)f(n,m1)+(n2)f(n,m2)+ans=f(n,m)-\binom{n }{1}f(n,m-1)+\binom{n }{2}f(n,m-2)+\dots

也就是:

ans=i(1)i+1(ni)f(n,mi)ans=\sum_i(-1)^{i+1}\binom n if(n,m-i)

组合数求的就是哪 ii 列同时变,那就提前给那些位置填个1.

在第一题中,是不能相遇。现在是不能超过。所以要对其中一条曲线进行平移。

f(n,m)f(n,m) 可以用类似第一题的做法。

I

又是一个贪心,那要怎么贪。

考虑这个代价指的是什么。

相当于是 aia_i 的面积,而这个 aia_i 的形状就是金字塔形状。

盲猜下界是否能取得 bib_i ,然后样例2hack掉了。

相当于找到一个 aa 数组,完全包含 bb 数组,求这个大的部分是多少。

相当于问:

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

  2. bb 怎样向上填充最小的 aa

这样的 aa 是怎样的:相邻的差分值之和小于等于最大值乘2.

那就是 aiai+12M\sum |a_i-a_{i+1}|\le 2M

现在要调整 bb 了。

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

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

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

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

选最短的谷底最好。