差分

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

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
programming_algorithm:contest_history:atcoder:2019:0511_diverta2019 [2019/05/16] – [解法] ikatakosprogramming_algorithm:contest_history:atcoder:2019:0511_diverta2019 [2019/05/16] (現在) – [解法] ikatakos
行 164: 行 164:
 先述の通り、$X$ は一意に確定する。末尾の $X$ へは $DP[X][N][0]$ から遷移するので、それが答え。 先述の通り、$X$ は一意に確定する。末尾の $X$ へは $DP[X][N][0]$ から遷移するので、それが答え。
  
-末尾が $X$ だから見るべきは $DP[X][N][X]$ じゃないのかと一瞬思うが、最後は必ず区間確定するので、遷移元る0の方を見る。+末尾が $X$ だから見るべきは $DP[X][N][X]$ じゃないのかと一瞬思うが、これはあくまで「最後に決定した区間が $X$ であるもの」の数。$acc$ の末尾は必ず区間として確定しなければならないが、$DP[X][N][X]$ にはそ前の $X$ 確定したまま末尾未確定状態の場合も含まれ。$DP[X][N][0]$ であれば、最後に確定した 0 から必ず末尾の $X$ に遷移できる。
  
-$acc$ 上で最後に出現した0の後に $X$ が複数個あろ条件を満すようにするには末尾の $X$ 以外使えい。+  acc   0  1  ...     2  X 
 +                        ~~~~     ~ ←末尾は必ず使 
 +                        └DP[X][N][X]はこれとかで終わっまま 
 +                          末尾区間未確定パターンも含まれる
  
-$DP[X][N][X]$ は、そのような使えない $X$ も混ざった値となってしまっている。 +===accの末尾が0だった場合===
- +
-  累積xor  X  0  1  ...  0  X  X  2  X +
-                            ~~~~     ~ ←末尾は必ず使う +
-                            └こいつらを使ったら、末尾との間に0がもう1つないといけないので使用不可 +
-               →DP[X][N][X]はこいつら(や、もっと前のX)で終わるパターンも含んでしまっている +
- +
-===累積xorの末尾が0だった場合===+
  
 まず、$X=0$ の場合、$acc_i$ が0の時に区切るか区切らないかを(末尾以外)独立に選べるので、$2^{0の出現回数-1}$ である。 まず、$X=0$ の場合、$acc_i$ が0の時に区切るか区切らないかを(末尾以外)独立に選べるので、$2^{0の出現回数-1}$ である。
programming_algorithm/contest_history/atcoder/2019/0511_diverta2019.txt · 最終更新: 2019/05/16 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0