NOIP 模拟 20/11/16

A

B

考虑两个栈合并,第二个栈的贡献可以直接算
然后要用第二个栈的 min ⁡ \min min 去找到第一个 < < < 它的位置算贡献
枚举这个位置算 > > > 它的 min ⁡ \min min 有多少个就可以了

C

注意到每次就是抠出来一个集合 S S S,它的补集填一种颜色
首先这样操作一定是合法的(充分性)
下面证必要性:只需证明合法的染色方案一定存在 z z z 使得包涵 z z z 的集合为同一种颜色
若不存在 z z z,设 U U U 为全集且为黑色,那么我们考虑所有为白色的集合
由于包涵 z z z 的集合中两个颜色都有,所以 U U U 一定为白色
那么基于这个进行 D P \mathcal{DP} DP 就可以了

D

注意到第一次出现的位置单调不降
a x , b x a_x,b_x ax,bx x x x 在两个序列里最后出现的位置
那么若 a x > b x a_x>b_x ax>bx 则不合法
b b b 中有 a a a 中没有的数那么不合法
我们从后往前构造,此时将 a i a_i ai 变成 b i b_i bi
容易知道 i i i 之后一定有个 a j = b i a_j=b_i aj=bi
所以我们可以把 i i i 之前的 a i a_i ai 都变成 b i b_i bi 然后把 a i a_i ai 变成 b i b_i bi

A

容易发现答案为 a 1 − a 2 a_1-a_2 a1a2
归纳,若最先合并 a n − 1 , a n a_{n-1},a_n an1,an 或者不是,二者是对称的

B

一位一位确定,设当前有 c c c p i = i p_i=i pi=i,有 t t t 个没有填的 > i >i >i
c ← m − c c\leftarrow m-c cmc
先钦定 ( t c ) \binom{t}{c} (ct) 然后相当于是 t − c t-c tc 个可以 p i = i p_i=i pi=i n − i − c n-i-c nic 个空位
j j j p i p_i pi 可以 = i =i =i 的放 i i i 个空位的方案数为 F i , j F_{i,j} Fi,j
F i , j = ∑ k ≤ j ( j k ) ( i − k ) ! ( − 1 ) k = ∑ k ≤ j ( j − 1 k ) ( i − k ) ! ( − 1 ) k + ∑ k ( j − 1 k − 1 ) ( i − k ) ! ( − 1 ) k = F i , j − 1 + ∑ k ( j − 1 k ) ( i − 1 − k ) ! ( − 1 ) k + 1 = F i , j − 1 − F i − 1 , j − 1 F_{i,j}=\sum_{k\le j}\binom{j}{k}(i-k)!(-1)^k\\=\sum_{k\le j}\binom{j-1}{k}(i-k)!(-1)^k+\sum_{k}\binom{j-1}{k-1}(i-k)!(-1)^k\\=F_{i,j-1}+\sum_{k}\binom{j-1}{k}(i-1-k)!(-1)^{k+1}=F_{i,j-1}-F_{i-1,j-1} Fi,j=kj(kj)(ik)!(1)k=kj(kj1)(ik)!(1)k+k(k1j1)(ik)!(1)k=Fi,j1+k(kj1)(i1k)!(1)k+1=Fi,j1Fi1,j1
F i , j = F i − 1 , j + F i , j + 1 F_{i,j}=F_{i-1,j}+F_{i,j+1} Fi,j=Fi1,j+Fi,j+1

C

考虑 r = n r=n r=n 怎么做,容易发现最大匹配为 min ⁡ ( a , b ) \min(a,b) min(a,b) a , b a,b a,b 为左右非零度点个数
于是可以做背包 O ( n 2 m 2 ) \mathcal{O}(n^2m^2) O(n2m2)
考虑如何最小化最大匹配,由 H a l l \mathcal{Hall} Hall 定理,最大匹配为 n + min ⁡ S ( ∣ N ( S ) ∣ − ∣ S ∣ ) n+\min_S(|N(S)|-|S|) n+minS(N(S)S)
我们现在知道每个点的度数,要构造一个图使最大匹配最小
那么我们一定会选左边几个度数最小的点,找到右边几个度数最大的点连过去
d ( S ) d(S) d(S) 为集合 S S S 的度数和
n + min ⁡ S , T ( ∣ T ∣ − ∣ S ∣ ∣ d ( S ) ≤ d ( T ) ) n+\min_{S,T}(|T|-|S|\mid d(S)\le d(T)) n+minS,T(TSd(S)d(T))
容易发现只需要在背包里面记录 ∣ S ∣ , d ( S ) |S|,d(S) S,d(S)
因为最优解一定可以取到且非法解一定不会取到
复杂度 O ( n 3 m 3 ) \mathcal{O}(n^3m^3) O(n3m3)

D

考虑倍增,要用 7 k 7k 7k
注意到找到最大的 t t t 使得 2 t 2^t 2t 查出来是 2 t 2^t 2t 2 t + 1 2^{t+1} 2t+1 查出来不是
那么 2 t + 1 2^{t+1} 2t+1 查出来的就是答案,二分一下只用 3 k 3k 3k

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FSYo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值