A
将序列转化为 \(01\) 串,奇数为 \(1\),偶数为 \(0\)。
容易发现两个 \(0\) 不能分在同一组,于是答案的上限取决于奇数的个数,并且容易构造方案达到这个上界,随便做做就行。
B
将序列排序后,发现不管怎么加,大小顺序不变,记录下最大值按题意模拟。
C
根据基本数论知识可得,操作等价于加上 \(\gcd(a,b)\),所以在 \(\bmod (a,b)\) 意义下数不变,记录一下所有数枚举断点。
D
容易发现产生贡献只能是根节点和叶子结点的值不一样。
将问题转化为一堆叶子未确定和一堆叶子已确定。
当根节点是确定的,而且先手先填,所以如果有 \(x\) 个问号,那么先手可以多拿 \(\lceil\frac{x}{2}\rceil\) 个贡献。
否则,就要开始分讨,我们先要证明一个引理,就是先手和后手他们填的数不可能相同。证明也很简单,他们可以进行反悔,如果给对手多了一个贡献,那么他可以回之前操作取消。
因此,如果叶子里面 \(0\) 和 \(1\) 个数不同时,先手会优先把根节点选好,然后对于问号,只能拿 \(\lfloor\frac{x}{2}\rfloor\) 贡献。
相同时就大家都不选根节点,选完其它叶子结点再选根节点最优。
E
容易发现一条链只有所有边都被确定时才达不到上界。由于点是 \(\texttt{dfn}\) 序,有查询相邻节点,所以一条边只会经过两次,暴力维护即可,思维难度不如 D。
F
赛时止步于此。
标签:969,Codeforces,叶子,先手,Div,贡献,节点 From: https://www.cnblogs.com/g1ove/p/18396792