CF Round#934 Div.2
A. Destroying Bridges
题意
:给一张完全图,求删去\(k\)条边后,点1不可到达的编号最大的点。
题解
:手玩一下最优解盯着点1的边删就行。
B. Equal XOR
题意
:将2个n的排列打乱为等长的两部分,各选出\(k\)个值,使得两边的异或和相同。
题解
:构造,如果两个一样的数在一侧直接选,如果还剩就从异侧里面补。
C. MEX Game 1
题意
:博弈,轮流从数组里面取数,使得Alice得到的数组的mex最大。
题解
:发现从0开始,如果有至少两个数,那么一定是不急着拿的,只考虑出现一次的数,第一个可以先手直接拿,第二个就会成为瓶颈。
D. Non-Palindromic Substring
题意
:定义字符串为\(k-good\),即存在长度为\(k\)的非回文子串,定义字符串的权重为所有\(k-good\)的\(k\)之和,多次区间查询子串的权重。
题解
:这个\(good\)是一个非常强的约束,当\(k\)为偶数时,要求字符串完全由一个字符组成,当\(k\)为奇数时,要求字符串由两个字符交替组成,特别地当\(k =
len(str)\)时需要特判。因此本题转换为了多次对区间子串求是否为回文串,manacher解决。
E. Tree Compass
题意
:定义染色操作,对树的任一节点和任一距离\(d\),染色所有到该点距离为\(d\)的点,求一棵树的最小染色次数。
题解
:很容易想到树的直径,讨论一下链的退化情况,按照链的长度分为:奇数,模4余2,模4余0,共三类情况,并可以给出由中心开始的染色方案。扩展到树的普通情况,基于链的性质,链外的路径一定不会更长,因此从中心开始的染色方案一定可以覆盖直径以外的节点,固可按照直径链的退化情况进行构造。
F. Counting Is Fun
题意
:对于一个数组,可以选择一段长度大于1的子数组进行区间减操作,如果一个数组可以通过若干次操作变为全0数组,则称其为好的。求长度为\(n\)的,初始元素范围在\([0, k]\)中的好数组一共有多少个。
题解
:
首先要把这个好的定义转换一下,主要的限制来源于长度要大于1,这意味着需要满足\(a_{i} \leq a_{i-1} + a_{i+1}\),对于数组两端可以认为\(a_{0}=a_{n+1}=0\),满足这个条件即为好数组。
然后考虑统计,一个简单的想法是dp,状态一定要有\(k^2\)表示这个约束,时间复杂度太大,那么这种计数问题通常就要往容斥原理的方向考虑,定义\(a_{i} \ge a_{i-1}+a{i+1}\)时,位置\(i\)是坏的。定义\(f(x)\)表示集合\(x\)中所有位置都是坏的的数组个数,那么根据容斥原理好的数组总数为\(\sum (-1)^{|x|}f(x)\)。
接下来考虑怎么求这个容斥,\(f[i][j][0/1]\)表示:\(a_{i}=j\),考虑\([1, i)\)位置中有至少奇数/偶数个坏位置的方案数,那么转移方程如下:
位置\(i-1\)无所谓是不是坏的(容斥原理):\(f[i][j][l] = \sum f[i-1][j][l]\)
位置\(i-1\)一定是坏的:\(f[i][j][l] = \sum f[i-2][j'][l^1] * (k-j'-j)\)
dp式前缀和优化一下就可以得到\(O(n^2)\)的写法。