A. One-dimensional Japanese Crossword
- 统计连续的B长度。
B. Passwords
- 根据题意模拟下。
C. Journey
- (dp(i,j))表示走到(i)经过(j)个点的最小花费。
D. Maxim and Array
- 记$$M=prod_{i=1}^{n}{a_i}$$
- 假设将(a_i=a_i+x),则增量为(frac{M}{a_i}cdot(a_i+x)-M),即$$frac{Mx}{a_i}$$
- 显然为了让值变小,增量需要为负数,且(|frac{M}{a_i}|)需要尽可能大。
- 根据(M)的正负分类讨论取正负值即可。
- 因为每次取正值最小、负数最大,可以用优先队列维护。
E. Road to Home
- (f(i))表示在不超过(r_i)的前提下最多能唱的数量,(g(i))表示从(l_i)前最多能唱的数量。
- 每次从一个位置开始唱歌,必然是能唱到不能唱为止,否则就算中途停下来也只是将唱歌区间后移了而已。
- 注意(f(i))的末位置在((r_i-p,r_i])中,这些位置到(r_i)都不足以唱一首歌,那么保存最大数量,数量相同的情况下位置最靠左即可。
- 假设(f(i))的最优位置在(x),那么下一次可以唱歌的时间点为(x+t),显然需要找到(j)满足(x+tle r_j),此时有两种决策:
- 唱歌到(r_j)边界,更新(f(j));
- 停止唱歌直到(l_{j+1}),更新(g(j+1))。