A Avoiding Zero
如果和是正数就排成正数、0、负数,否则排成负数、0、正数。
B Chess Cheater
抽出最前面和最后面的 L
段,再考虑夹在两段 W
之间的 L
段。看后面最多能贪心选取几个段,全部填充为 W
即可。
C The Hard Work of Paparazzi
题意:给定一个 r × r r \times r r×r 网格图,一开始你在 ( 1 , 1 ) (1, 1) (1,1)。1 单位时间可以在网格图上移动 1 单位距离。 t i t_i ti 时间在 ( x i , y i ) (x_i, y_i) (xi,yi) 会有一个人出现,如果在该时间你恰好到达那就可以和那个人合影。问你最多可以和多少人合影。( t i t_i ti 递增)
类似 LIS,设 f ( i ) f(i) f(i) 为在和第 i i i 个人合影完时,最多已经和多少个人合影过了。那么对于 t i − t j ≥ 2 r − 2 t_i - t_j \ge 2r - 2 ti−tj≥2r−2 的 j j j,显然都是可以转移到 i i i 的,而且这些 j j j 随着 i i i 递增而递增,因此可以用一个前缀最大值维护。
对于其他的 j j j 暴力一下就行了。时间复杂度貌似是 O ( n r ) O(nr) O(nr),但跑的非常快。
D Unshuffling a Deck
题意:给定一个长为 n n n 的排列,每次操作可以将这个排列分割成至少 2 个段,然后翻转这些段的位置(段内的数顺序不变)。要求在 n n n 次操作内将其排好序。
一种简单的构造方案是:第 n − i + 1 n - i + 1 n−i+1 次操作后:
- 如果 i i i 是偶数,就让排列的开头 n − i + 1 n - i + 1 n−i+1 个数为 n , n − 1 , ⋯ , i n, n - 1, \cdots, i n,n−1,⋯,i。
- 如果 i i i 是奇数,就让排列的最后 n − i + 1 n - i + 1 n−i+1 个数为 i , i + 1 , ⋯ , n i, i + 1, \cdots, n i,i+1,⋯,n。
显然当 i = 1 i=1 i=1 时就排好序了。具体怎么操作以保证这个 loop invariant 并不困难,故不赘述。
E Xum
题意:一开始给定一个奇数 x x x,要求在 1 0 5 10^5 105 次操作内得到 1 1 1。一次操作可以任选已有的两个数(可以是同一个),得到两者的和或者异或。
维护一个线性基,每次随机从已经有的数中选两个加一下(要设定一个和的上限,我设的 2 50 2^{50} 250),如果不在线性基里面就插到线性基中,直到 1 也在线性基里面。
正确性似乎难以证明,但跑的快得很。
F
待补。。。
G
待补。。。
H
待补。。。
小结
我果然还是只有 Div2 的水平啊,唉。
D 玩了一个小时才玩出一个好的构造,结果没看到一个条件还 WA 了一次。
E 玩了一个小时,猜到是随机+线性基,结果太困了没试着去写… 又怂了…
构造水平堪忧。