Noip2021模拟赛题解

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Noip2021模拟测试赛一

A 游戏

A A A 先从 ( 1 , 1 ) (1,1) (1,1) 移动到 ( 2 , m ) (2, m) (2,m) B B B 再从 ( 1 , 1 ) (1,1) (1,1) 移动到 ( 2 , m ) (2, m) (2,m)

容易知道 A A A 移动一定是先右移任意格再下移一格最后右移到 ( 2 , m ) (2,m) (2,m)

最终会剩下右上角左下角两个区域没取。 B B B 只能取其中一个区域。

所以 O ( m ) O(m) O(m) 枚举暴力计算答案。

B 公司补偿

简单 DP 非常容易但由于 d d d 极大所以会爆。

但是可以发现确定工资后最多只有 n n n 种不同工资。

我们只考虑工资之间的大小关系再用 DP 计算。

这时要使用组合数但是可能有重所以容斥。

C 无聊的线段

如果我们固定选择线段的权值的范围 [ l , r ] [l, r] [l,r]显然将权值在 [ l , r ] [l, r] [l,r] 之内的线段全部选择。

容易发现 l , r l, r l,r 一定是某一个线段的权值因为不是线段的权值的 l , r l, r l,r 不优。

发现 l l l 增大时为了满足要求 r r r 不会减小。

所以双指针 O ( n ) O(n) O(n)

问题来了怎么判断是否满足要求

我们用并查集线段覆盖的节点还是其他

线段树区修区查。

对于一个新增线段 [ l , r ] [l, r] [l,r] 我们让 [ l , r − 1 ] [l, r -1] [l,r1] 的点值全部加 1 1 1。减去则相反。

查询则查询 [ 1 , m − 1 ] [1, m-1] [1,m1] 的最小值是否为 0 0 0

Noip2021模拟测试赛二

B 点对游戏

可以发现每个人取的节点数量是固定的所以我们考虑单独计算假设为 x x x

由于完全随机所以每个节点被选取的概率也是一样的为 C n − 2 x − 2 C n x \dfrac{C_{n-2}^{x-2}}{C_n^x} CnxCn2x2

然后就是计算得分发现只需要计算距离为幸运数的点对的个数即可。

点分治

最终答案乘上 C n − 2 x − 2 C n x = x ( x − 1 ) n ( n − 1 ) \dfrac{C_{n-2}^{x-2}}{C_n^x} = \dfrac{x(x-1)}{n(n-1)} CnxCn2x2=n(n1)x(x1)

Noip2021模拟测试赛三

A 选举

首先想到贪心发现不行。

那就 DP。考虑 f i f_i fi 代表 i i i 之前最大答案。然后发现 f i f_i fi 转移非常鬼畜需要 O ( l − r ) O(l - r) O(lr)

f i = m a x j = l r ( f j + [ ∑ k = j + 1 i ] ) f_i = max_{j=l}^{r}\Big(f_j+\Big[\sum_{k=j + 1}^{i}\Big]\Big) fi=maxj=lr(fj+[k=j+1i])

额。。。那个 [ ] [] [] 就自行理解一下吧主要是我不知道怎么表示

尝试优化。发现区间 [ j + 1 , i ] [j + 1, i] [j+1,i] 的和可以使用前缀和求出一下称为 s s s

就变成了有关 s i s_i si s j s_j sj 大小关系的式子。

那么我们开一个值域线段树下标为 s i s_i si

记录什么呢节点 [ L , R ] [L,R] [L,R] 记录 [ i − l , i − r ] [i - l, i - r] [il,ir] 内每个 s j ∈ [ L , R ] s_j \in[L,R] sj[L,R] f j f_j fj所有 f j f_j fj拿单调队列储存

对于每个 i i i我们在线段树上查询

  • s j ∈ ( − ∞ , s i ) s_j \in (-\infty,s_i) sj(,si) 的最大 f j f_j fj
  • s j = s i s_j = s_i sj=si 的最大 f j f_j fj
  • s j ∈ ( s i , + ∞ ) s_j \in (s_i,+\infty) sj(si,+) 的最大 f j f_j fj

就可以计算答案了。

时间复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn)

B 蛋糕

欸欸额这题要画图先不写了吧。

可以自己推一下。

C 魔法树

被施了魔法的树就是点分树。

满足的条件是每个节点都是其子树的重心。

或者 ∀ u , max ⁡ v ∈ s o n u ( s i z v ) ≤ s i z u 2 \forall u, \max_{v\in son_u} (siz_v)\leq \dfrac{siz_u}{2} u,maxvsonu(sizv)2sizu

Noip2021模拟测试赛四

A

Noip2021模拟测试赛十一

A

可以发现对于每个连通块如果答案不是 − 1 -1 1则确定一个点的值其他点的值都能确定。而且每个联通块中编号最小的点的值可以随意确定。

所以我们对于每个连通块编号最小的点排序从后往前推。

然后发现 k ≤ 100 k \leq 100 k100所以不存在需要更改两个节点的值的情况。

最后一个编号最小的节点标为 k − 1 k - 1 k1然后前面的编号最小的节点全部标为 0 0 0

推一遍得出答案冲突就是 − 1 -1 1

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6