差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
programming_algorithm:contest_history:atcoder:2019:0413_abc124 [2019/04/13] – 作成 ikatakosprogramming_algorithm:contest_history:atcoder:2019:0413_abc124 [2019/04/13] (現在) – [解法] ikatakos
行 58: 行 58:
 ==== 解法 ==== ==== 解法 ====
  
-こういう「'0'と'1'を区間で反転させることで要素を同じにしていく」問題では、反転という操作は「異なる要素の境界を減らす」ことを意味すると考えると上手くいくことが多い。+こういう「'0'と'1'を区間で反転させることで要素を揃えていく」問題では、反転という操作は「異なる要素の境界を減らす」ことを意味すると考えると上手くいくことが多い。
  
   111001011100010   111001011100010
行 73: 行 73:
 こういう風な、'1'から始まる'1'と'0'交互の連続する境界について無くせばよい。 こういう風な、'1'から始まる'1'と'0'交互の連続する境界について無くせばよい。
  
-よって、'1'と'0'の連続する要素毎にカウントして、+よって、'1'と'0'の連続する要素毎にカウントして、([[wpjp>連長圧縮]])
  
   1110001000000100   1110001000000100
     ↓     ↓
-  [3, 3,1, 6,  1,2,0]  ←便宜上、左右端が'0'だった場合は'1'が0個と考えて0を追加しておく+  111 000 1 000000 1 00 
 +    ↓ 
 +  [ 3,  3,1,     6,1, 2, 0]  ←便宜上、左右端が'0'だった場合は'1'が0個と考えて0を追加しておく
  
 連続する $2K+1$ 要素の和の中で、最大のものを求めればよいことになる。 連続する $2K+1$ 要素の和の中で、最大のものを求めればよいことになる。
行 90: 行 92:
                       ~~~~~~~~~~~~~~    9                       ~~~~~~~~~~~~~~    9
  
-区間の和は、累積和を用いれば高速に行える。+区間の和は、累積和または尺取法を用いれば高速に行える。
  
 <sxh python> <sxh python>
programming_algorithm/contest_history/atcoder/2019/0413_abc124.txt · 最終更新: 2019/04/13 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0