Codeforces Round #374 (Div. 2)

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+t\le r_j\),此时有两种决策:
  1. 唱歌到\(r_j\)边界,更新\(f(j)\)
  2. 停止唱歌直到\(l_{j+1}\),更新\(g(j+1)\)
posted @   mcginn  阅读(177)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示