A Box is Pull
最优策略必然是至多只拐一个弯。
B Belted Rooms
先缩点,然后看能不能连成一个环。
C ABBB
类似括号匹配,A
是左括号,B
是右括号。
D Bouncing Boomerangs
一个简单的构造方法是按列从右向左考虑,利用右边的列满足左边的条件。
我们考虑遇到某个 a i a_i ai 时怎么满足条件。
- 如果 a i = 0 a_i = 0 ai=0,那么就不在这列放障碍物。
- 如果 a i = 1 a_i= 1 ai=1,就在 ( i , i ) (i, i) (i,i) 处先放一个障碍物。
- 如果 a i = 2 a_i=2 ai=2,就从右边拿一个还没使用过的列 j j j,其中 a j = 1 a_j=1 aj=1,把第 j j j 列的障碍物调整到第 i i i 行。
- 如果 a i = 3 a_i=3 ai=3,就从右边拿一个还没有放满的列 j j j,在第 j j j 列多加一个障碍物 ( i , j ) (i, j) (i,j)。
中途找不到能利用的列了就表明合法方案不存在。
E Carrots for Rabbits
题意:给定 n n n 个正整数 a i a_i ai,可以将每个数拆分成若干正整数。问拆分成 k k k 个数时所有数的平方和最小是多少。
方法一
对一个数拆分一定是尽可能平均。然后发现单个数拆分成 k k k 个尽可能相同的数后,数的平方和的减少量,随着 k k k 的增加是递减的。于是用一个堆对这个减少量贪心即可。
方法二
(其实我一开始往这个方面去想了,但没有更深入。)
利用 WQS 二分。
F Fruit Sequences
题意:给定一个 01 串,问每个子串的最长全 0 子串的长度加起来是多少。
最简单的方法就是枚举右端点,对每个左端点维护答案。这需要区间取 max 和区间求和,用 Segment Beats 很容易实现。
G
待补。
H
待补。