A - Balance the Bits
考虑将 (
看做 (1), )
看做 (-1)。那么一个括号序列合法当且仅当每个位置的前缀和均 (ge 0) 并且总和为 (0)。
优先满足第一个条件,有一个显然的保底策略:对于 (s_i=1) 的,两边都添加 (
,尽管可能最终总和会过大;而对于 (s_i=0) 的,两边选择前缀和较小的加 (
,另一个加 )
。
假如说最终两边总和不同,或者总和为奇数,你意识到唯一的调控空间只有 (s_i=1) 的将 (
换成 )
,那么肯定莫得。
然后就是所谓的调控了,尝试将最后几个 (s_i=1) 的将 (
换成 )
使得总和为 (0),然后检查一遍即可。
B - 3-Coloring
假如不是“3-Coloring”而是“2-Coloring”,那么唯一靠谱的方法就是黑白染色,而且 ban 颜色就痿掉了。
然而现在多了一种颜色供我们选择,那么一切就简单了。
首先还是黑白染色,颜色 (1, 2) 分别占有 (n^2/2) 个预定位置。第一步,我们先填满一种颜色的预定位置,具体的话,哪个被 ban 就填另一个。第二步,剩下的所有位置,周围都只有一种颜色,那么和备选的 (3) 一起,那个被 ban 就填另一个。
C - Travelling Salesman Problem
大 力 整 结 论 /dk
首先,将题意转化:(i o j) 的代价为 (max(c_i, a_j-a_i)=max(0, a_j-(a_i+c_i))+c_i)。后面的 (c_i) 是确定的,直接记入答案。再者,观察式子发现,如果将这些城市按 (a) 排序,那么从后往前走的代价必然为 (0),这意味着我们只要考虑从第 (1) 到第 (n) 个城市的最小花费即可,中间城市可以任意选,没有选的城市可以在 (n o 1) 的时候解决。
考虑当前第 (j) 个城市。观察式子不难发现,要使其尽量小,前一个落脚点 (i) 的 (a_i+c_i) 应该尽量大。不妨设 (f_j=max_{i<j} {a_i+c_i})。如果 (f_j < a_j),那么我们就落脚城市 (j)。虽然实际上并不是所有的落脚点都是这样的 (j),但其他的很显然代价为 (0)。
时间复杂度 (O(nlog n)),瓶颈在排序。
D - Flip the Cards
咕咕咕
E - 2-Coloring
题中所给的条件及其复杂,于是挖掘一下性质:蓝色的位置集中在上下两侧,作为两个连通分量;由于每行都应有一个蓝色的横段,下连通分量的顶端行号 (+1) 恰好等于上连通分量;由于每行有且只有一个蓝色横段,那么整个连通分量的上(下)轮廓为单峰;又因为要留给黄色竖段的位置,于是上下两个连通分量不能连通(四连通)。当然这不一定含括了本题的所有情况。
考虑怎么算这个东西:由于是单峰的,不妨拆成两段:设峰高为 (h),最右侧的峰值在 (i) 位置。那么相当于要计算有几条从 ((0, 1)) 到 ((i,h)) 的(只走上右)路径,然后和从 ((i+1,h-1)) 之后一条结构相同的路径组合。类似的,设 (j) 为上面的连通分量的峰值(最左侧)。不妨令 (i<j),那么整个式子为:
如果这是你发现了蓝色和黄色在 (n,m) 互换之后地位相同,那么别急着 ( imes 2),因为当 (j=i+1) 时会算重,把他改成 (i+2) 就行了。注意到最后整个东西要 ( imes 2),因为我们钦定了 (i<j),实际上可以反过来。
最后,这个式子是 (O(n^3)) 的,但实际上吧前两个组合数提到最后那个 (Sigma) 之前,就不难发现它可以前缀和优化,复杂度 (O(n^2))。
F - Balance the Cards
咕咕咕