CF1239

Codeforces Round #594 (Div. 1)

A

考虑只有一行且第一个格子为白色时,每次可以填连续相同颜色的一个或两个格子,因此其方案数为斐波那契数列,因为还有黑色,还需乘 \(2\)。一行确定后,其下一行必须填反色的情况,除非当前行为黑白相间的情况。第一行黑白相间时,对于列的确定也就是斐波那契数列了。得答案为 \(2(f_n+f_m-1)\)

B

\(s_i\) 为前缀左括号减右括号个数,当满足 \(\forall i \in [1,n]\ s_i \geqslant 0 \and s_n = 0\) 时,其对应的括号序列是合法的。对于任意的括号序列,其循环移位的合法括号序列个数为 \(s_i\) 中最小值出现的个数。可以画出 \(s_i\) 对应的折线,通过图像平移就能发现该结论。

交换同种括号没意义,交换 \()\)\((\) 会使一个区间的 \(s_i\)\(2\),其只会让最小值个数变小,因此只用考虑交换 \()\)\((\) 的情况。交换 \()\)\((\) 会使一个区间的 \(s_i\)\(2\),当该区间跨过一个最小值的位置时,最小值个数会变小,因此交换 \()\)\((\) 作用的区间一定为两个最小值之间的区间。

设原先的最小值为 \(v\)。可能是使区间内的 \(v+1\) 变成 \(v-1\),让 \(v-1\) 的出现次数贡献给答案。也可能是让一个没有出现 \(v+1\) 的区间内的 \(v+2\) 变成 \(v\),加上原先 \(v\) 的出现次数贡献给答案。\(O(n)\) 扫一遍即可统计。

C

直接模拟题意,发现需要查询小于一个数且下标最小的位置,线段树二分即可。

也可以用 \(STL\) 的一些东西维护。

D

发现 \(i\) 不可能同时为人和猫。将给出的信息进行连边,边的含义为若当前点为人,其指向的点都不能为猫,那么在同一个强连通分量内的点要么都是人,要么都是猫。缩点后在 \(DAG\) 上任选一个入度为 \(0\) 的强连通分量作为猫,其他点作为人即可。

E

最优情况一定是第一行权值 \(a_i\) 递增,第二行权值 \(b_i\) 递减。考虑两条拐点相邻的路径,设其中一条路径的拐点在位置 \(i\),另一条路径的拐点在位置 \(i+1\),得两条路径的权值差为 \(\Delta_i=| a_{i+1}-b_i |\),因为 \(a_i\) 递增,\(b_i\) 递减,得 \(\Delta_i\) 的图像为:

因此将最小值放到左上角,次小值放到右下角后,权值最大的路径的拐点只可能为 \(1\)\(n\)

那么问题就转化为了把权值分配给两行,使两行权值差最小,背包解决即可。\(DP\) 值记录选择的情况,可以方便构造方案。

F

称模 \(3\) 意义下,度数为 \(0\) 的点为 \(0\) 点,度数为 \(1\) 的点为 \(1\) 点,度数为 \(2\) 的点为 \(2\) 点。

考虑合法情况只有下列四种,且每种情况最后保留的点不能是所有点:

保留 \(0\) 点。

保留两个端点为 \(1\) 点,其余点为 \(2\) 点的链。

保留由 \(2\) 点构成的环。

保留两个不相交的 \(2\) 点的环,且经过同一个 \(1\) 点,即两个环有一个公共点,该点为 \(1\) 点。

然后根据这四条判定即可。

posted @ 2020-09-30 17:50  lhm_liu  阅读(194)  评论(0编辑  收藏  举报