CF Round906 vp日志

发布时间 2023-11-07 17:07:08作者: OIer_xxx2022

太菜了只会四个

A

题意:给定一个长度为 \(n\) 的数组 \(a\) ,你可以将他随便重排,问是否能让它满足 \(a_i + a_{i+1}=a_{i+1}+a_{i+1}=.......=a_{n-1}+a_n\)

首先如果 \(a\) 中的元素种类超过 \(2\) 个,那么这个序列是不可能满足条件的。证明很简单,如果有 \(a,b,c\)\(a \not= b \not= c\) ,那么 \(a+b \not = a+c \not= b+c\)

而元素种类为一种的显然可以,那么对于两种元素 \(a,b\) 的话,我们观察到它满足条件当且仅当每个 \(a\) 恰好能跟一个 \(b\) 配对,即至少其中有一种元素的出现次数为 \(\lfloor \frac{n}{2} \rfloor\) 。那么这道题就做完了。

B

怎么感觉这题比A简单。

题意:给定两个 \(01\)\(s,t\) ,你可以进行若干次操作,每次操作可以将 \(t\) 插入 \(s\) 中,问是否能使 \(s\) 变成一个满足 \(s_i \not= s_{i-1}\) 的字符串。

这个思路很简单,只需枚举 \(s\) 中所有 \(s_{i} \not= s_{i-1}\) 的地方,再判断能否插入 \(t\) 即可,同时要特判掉存在 \(t_i=t_{i-1}\) 的情况。

C

为什么感觉D更简单

题意:给定一个 \(01\)\(s\) ,你可以进行最多 \(300\) 次操作,每次操作在 \(s\) 中插入一个 \(01\) ,问是否能使 \(s\) 满足 \(s_{i} \not=s_{k-i+1}, \forall i \in [1,k]\)\(k\)\(01\) 串长度。

考虑当前第一位和最后一位,如果两位不同就往里考虑,如果相同的话则在两边添加 \(01\),若为 \(0\) 加在右边,为 \(1\) 则加在左边,用 deque维护即可,时间复杂度 \(O(\sum k)\)

D

题意:有 \(n\) 个点,每个点有点权 \(a_i\) ,现在想将这些点连成一张联通图。两个节点可以加边当且仅当 \(\sum \limits_{k \in S} a_k \ge i \cdot j \cdot c\) , \(c\) 是一个给定的常数,\(S\) 代表当前与 \(i\)\(j\) 联通的点的点权和(包括 \(i,j\))。

结论:这张图是可以联通的当且仅当存在一个连边次序使节点 \(1\) 能与到这张图上的所有点连边。

考虑证明这个结论。我们记 \(s_i = \sum \limits_{k \in S_{i}}{a_k}\),那么连边条件转化为 \(s_i+s_j \ge i \cdot j \cdot c\), 由于 \(c\) 是可以被处理掉的,所以我们先记它为 \(1\) 。同时,我们可以发现添加新边对本来就能添加的边没有影响,所以我们这里可以贪心的从 \(1\) 向外连边,若 \(1\) 可以联通到其他所有边,那么这个图是可以联通的。

这样我们的问题就变成了对节点 \(1\) 求一个最优的连边次序。注意到当 \(i=1\) 时柿子变成了 \(a_1+a_j \ge j \cdot c\) ,移项得 \(j \cdot c -a_j-a_1 \le 0\),此时我们肯定是让不等式左边越小越好,那么只要按照这个柿子对所有除 \(1\) 以外的点排序,再按序连边即可,时间复杂度 \(O(\sum{nlogn})\)