燃やす埋める問題

燃やす埋める問題についての記事です. 動機 燃やす埋める問題については,一度エントリを書いた のですが,そこにはともかく理解したことを全部書いたので,コンテスト中に参照しても把握するのがたいへん,という状況になってしまっています.そこで,コンテスト中に思い出したい最小限のことだけまとめることにしました. 考え方 問題文中に「$p$ のとき$b$を受け取る」という記載があったら,「先に $b$ を受け取る.$\neg p$ の時 $b$ を支払う」と読み替えて,すべて支払いをすると考える. グラフ全体の source ノードのラベルは True,sink ノードのラベルは False. ノード $p$ からノード $q$ への矢印に,重み $a$ がついているのは,「$p$が成り立つのに$q$が成り立たない場合,コスト $a$ を支払う」と読む. したがって,この図では,以下が表現されている $p_6$ が成り立って,$p_7$ が成り立たなかったら,$a_2$ 支払う. $p_1$ が成り立たなかったら,$a_5$ 支払う. $p_7$ が成り立ったら,$a_3$ 支払う. $p_8$ は成り立つ. $p_9$ は成り立たない. 最小カットが,コスト最小の真偽割当.図の赤線だと,$p_1, \ldots, p_6, p_8$ を真,$p_7, p_9$ を偽にする割当に相当し,この場合のコストは$a_2 + a_6$. 連言や選言のノードは,矢印を出せるか入れられるかが決まっている.下図を参照.不可の理由は,たとえば連言なら,$p$, $q$を真に,$p\land q$ を偽にできてしまうから.(矢印の根本を真にできてしまうと不当な利益がある.矢印の根本を偽にできても嬉しくない) したがって,「$p \land q$ なら,支払を行う」は,表現できない. しかし,$\neg q$ の方を表すノード $r$ を用意すれば, 「$p$ が成り立って $r$ が成り立たなければ,支払を行う」の形で表現できる.

2022-07-10 · 2021-05-22 (初版) · yamate11

Non-divisible Set - Atcoder Regular Contest 141 D

解説ACです

2022-06-04 · yamate11

Mo's algorithm メモ

Mo’s algorithm のコンテスト用メモです

2022-05-19 · 2022-03-06 (初版) · yamate11

RBS - Educational Codeforces Round 115 F

Educational Codeforces Round 115 F. RBS の解法です. 解説ACです. 問題概要 問題へのリンク 文字 ( と ) のみからなる空でない文字列全体の集合を $S$ とする. $s \in S$ に対し,$s$ の空でない prefix であって, 括弧の対応が取れているものの数を $f(s)$ と書くことにする. 例えば $f(\verb!"()()()))"!) = 3$, $f(\verb!"(()())(("!) = 1$. $S$ の要素が $n$ 個与えられる. これらを並べ替えて連結して得られる文字列 $s$ について,$f(s)$ の 最大値を求めよ. 制約: $ 1 \leq n \leq 20$,与えられる文字列の長さの和は $4\times 10^5$ 以下. 制限時間3秒. 解法 0-index で記述する. $\bar{n} := \{0, \ldots, n-1\}$ とする. $s \in S$ に対し,現れる ( の数から ) の数を引いたものを $g(s)$ と書く. $s \in S$ で,全ての $i < |s|$ に対して $g(s) \geq 0$ であるものの集合を $L$ と書く.$D := S \setminus L$....

2022-05-19&nbsp;·&nbsp;yamate11

Differ by K bits - Atcoder Regular Contest 138 D

公式解説とは少しだけ異なる解法です

2022-04-14&nbsp;·&nbsp;yamate11

Small Multiple - Atcoder Beginner Contest 077 D

公式解説の行間を埋めました.

2022-04-05&nbsp;·&nbsp;yamate11

ゼータ変換,メビウス変換,高速ゼータ変換, 高速メビウス変換

高速ゼータ変換について,自分用にまとめた記事です.

2022-03-22&nbsp;·&nbsp;yamate11

Prefix XORs - AtCoder Regular Contest 137 D

AtCoder Regular Contest 137 D - Prefix XORs の解法です. コンテスト中に解いた方法 (実験結果から適当に求める) をベースに, 公式解説を参照して追加しました. リュカの定理の証明もWikipediaを見て書きました. 問題概要 長さ$N$の整数列 $A = (A_1, \ldots, A_N)$ と整数 $M$ が与えられる. 下の操作を$k$回行ったあとの $A_i$ の値を $A(i, k)$ と書くことにする. $k = 1, 2, \ldots, M$ について,$A(N, k)$ を求めよ. 操作: 各$i = 1, 2, \ldots, N$ について, $A_i$ を同時に $A_1 \oplus A_2 \oplus \cdots \oplus A_i$ で置き換える. 制約: $1 \leq N, M \leq 10^6$; $0 \leq A_i < 2^{30}$ 問題へのリンク 解法 実験 $A(i, k)$ は,$A_1, \ldots, A_i$ のいくつかのXORをとったものになる. そこで,$a(i, m, k) \in \{0, 1\}$ をとって, $A(i, k) = \bigoplus_{m=1}^{i} a(i,m,k) A_m$ と書く. 計算してみると分かるとおり,$a(i, m, k)$ は,$i - m$ と $k$ にしか 依存しない.そこで,$b(j, k) := a(j, 0, k)$ と書くことにする. $A(i, k) = \bigoplus_{m=1}^{i} b(i - m, k) A_m = \bigoplus \{ A_{i - j} \mid b(j, k) = 1; j = 0, \ldots, i-1 \}$ だから, 各 $k = 1, 2, \ldots, M$ について,$b(j, k) = 1$ となる $j$ を (高速に) 列挙できれば良い....

2022-03-20&nbsp;·&nbsp;yamate11

Baby Ehab Plays with Permutations - Codeforces Round 717 (Div.2) E

解説ACです.

2022-03-05&nbsp;·&nbsp;yamate11

Balls in Boxes - Atcoder Beginner Contest 231 G

解説ACです

2022-02-24&nbsp;·&nbsp;yamate11

Predilection - Atcoder Beginner Contest 230 F

解説ACです.

2022-02-20&nbsp;·&nbsp;yamate11

最大流・最小カット

最大流と最小カットについてのコンテスト用のまとめです

2022-02-20&nbsp;·&nbsp;yamate11

Cubic? - AtCoder Beginner Contest 238 G

ABC238G Cubic? の解法です.公式解説と同じです.

2022-02-13&nbsp;·&nbsp;yamate11

Zobrist Hashing

ABC238 G Cubic? を解くのに使うことができる Zobrist Hashing に関する記事です.

2022-02-13&nbsp;·&nbsp;yamate11

素因数分解に要する時間

素因数分解に要する時間を,事前計算と個別の計算に分けて計測しました

2022-02-06&nbsp;·&nbsp;yamate11