A. Searching Local Minimum
交互题,查找数组的一个波谷,要求查询次数在 100 次内,数组长度为 \(10^5\)。
经典二分查找即可。
|
|
B1. Painting the Array I
给定一个数组 \(a\),要求将其划分为两个子序列 \(a^{(0)}, a^{(1)}\),使得 \(seg(a^{(0)}) + seg(a^{(1)})\) 最大,其中 \(seg(a) = \sum [a_{i} \neq a_{i + 1}]\)。
做法很多,学弟用的 DP,题解给了一个形式化的证明。我的做法是首先将若干重复的串合并为两个,之后考虑什么情况下必定会出现 \(a^{(x)}_i = a^{(x)}_{i + 1}\)。对于两个成对出现的 \(a_i = a_{i + 1}, a_{j} = a_{j + 1}, i < j\) :若 \(a_{i} \neq a_{j}\),那么就可以直接将两个均分给两个子序列;若 \(a_{i} = a_{j}\),那么我们就需要两个数字将两个对隔开,这就需要至少两个连续的数字来隔开,且均不为 \(a_{i}\)。
|
|
B2. Painting the Array II
与 B1 题意类似,要求 \(seg(a^{(0)}) + seg(a^{(1)})\) 最小。
使用 Bélády’s algorithm 算法来贪心。
|
|
C. Continuous City
构造一个图使得 \(1\) 到 \(n\) 的路径长度 \(\in [L, R]\),且每个距离都恰好存在对应的一条路径。
二进制构造即可,构造题好靠智商啊 <(\= -︿-\=)>﹀)>
|
|