Codeforces Round #171 (Div. 2)

A. Point on Spiral

  • 由于坐标\(、|x|、|y| \le 100\),所以可直接bfs计算。
  • 若数据较大,需要找规律。

B. Books

  • 维护窗口\([l,r]\),使\(\sum_{i=l}^{r}{a_i} \le t\)

C. Ladder

  • 预处理出\(L_i\)表示位置i向右可以递增多少距离,\(R_i\)则表示向左。
  • 那么若\(l,r\)满足题意的话,则\(L_l+R_r \gt r - l + 1\)

D. The Minimum Number of Variables

  • \(dp(mask)\)表示当前存储变量的状态。
  • 若要计算\(a_t\),需要在\(、i、j \lt t\)中找\(a_i + a_j = a_t\)的pair,新值\(a_t\)可以有两种选择:用新变量存储、或者用之前已存在的变量。

E. Beautiful Decomposition

  • 对于连续的1来说,有两种操作:用\(2^i-2^j\)组成;或者\(\sum{2^i}\) 组成。
  • 观察样例1101101,在使用\(2^i-2^j\)形式获得连续的1之外,可以拓展到后面的0,使得后续的1可以直接使用\(-2^k\)组成,但是两个1中间的0会变成1,所以需要额外付出将0变成1的代价。
  • 先将字符串缩减成101010……的形式,其中记录01的个数,对于每个1,我们只关心前面的0是否变成1,所以\(dp(i,j)\)记录在偶数位(即0)​时的状态j(0或1),根据0的状态可以计算出将组成当前1的最小值。
posted @ 2016-12-21 10:23  mcginn  阅读(164)  评论(0编辑  收藏  举报