Codeforces Round 884 (Div. 1 + Div. 2)
Codeforces Round 884 (Div. 1 + Div. 2)
A.Subtraction Game
简单构造,输出a+b
B. Permutations & Primes
2和3都是质数,1不是,因此满足条件的区间一定包含1。把1放到序列最中间,2和3放到两端其他数字随意排列,可以证明此序列得到的素数mex的个数最大,为\(\lfloor \frac{n + 1}{2} \rfloor \cdot \lceil \frac{n + 1}{2} \rceil + [n + 1是否为素数]\)。
C. Particles
dp题,设\(f(i)\)表示将前i个合并成一个所得的最大值,可以发现两个粒子之间如果相隔奇数个粒子,则这两个可以合并,因此状态转移方程为 \(f(i) = max(a_i, a_i + f(i - 2), a_i + f(i - 4), ... )\)分别表示第i个不合并, 和第i - 2个合并, 和第i - 4个合并,...
因为第一个和最后一个粒子都可以直接去掉,因此最终答案为 \(f(1), f(2), ..., f(n)\)中的最大值。
D. Row Major
根据题意可以发现,若\(a * b = n\),则第i个位置字母和第i + a个位置字母不能相同。
可以设n个点,如果\(k | n\),则在第i和第i + k两点之间连一条边,连完之后求图的最小着色数即为最少使用的字母个数。根据上面的方法打表或者手推数据可以发现最少使用的字母数即为第一个不满足\(k | n\)的k。
然后按照a,b,c,...顺序以k为循环排列即可
E. Great Grids
将A,B,C,替换为0,1,2,填入表格中可以发现,一个满足条件的表格从每个格子向右走或者向下走,在模3的条件下只有+1或者+2两种情况。将其标记在两个格子相邻的分割线上,然后可以发现每条横或者竖分割线上标记的数字都相同。
再考虑给定的约束条件,设2x2方格的主对角线为左上到右下,副对角线为右上到左下,则若给定了主对角线的约束,则此2x2方格中心点关联的一横一竖的分割线上的数字应该不同,相反若是副对角线约束,则两分割线上应同为+1或者+2。
因此,此问题转化成了一个二分图染色问题,我们将给定的约束的分割线连上边,分为两种边,表示两边端点染色应相同还是不同,然后用dfs染色并判断图是否合法。
F1. Min Cost Permutation (Easy Version)
首先对于\(c > 0\) 的情况,将a数组以升序排列可以得到最小的value值并且字典序最小。
对于\(c < 0\) 的情况,我们将原式\(|b_{i + 1} - b_i - c|\)绝对值内添加负号得\(|b_i - b_{i + 1} - (-c)|\),因为-c是大于0的,则可知将a数组降序排列可得最小的value值,但此时字典序不一定为最小。
从前往后贪心地考虑某一位最小能填几可以保证value值不变,因为初始序列为降序排序,设当前已经完成了前i位,i往后的序列一定为降序排序,设存在一个最大的j,满足:
操作前为
操作后为:
且操作前后序列的value值不变,则可将j提到i后,其他顺序不变。
若value值不变,即满足:
用两个for循环,i从0到n,j从n到i + 1,找到满足的j即为最大的j(\(a_j\)最小的j)