「解説AC」しかしていません.Announcement を読んで,テストケースもダウンロードしてから取り組んだ方がよいです.ダウンロードリンク one, two について,one は壊れていて two は生きています(2025/07/01 現在)
A. Nash equilibrium
$n,m$ を入れ替え,入力の $(n,m)$ 行列をこの順に $(m,n)$ 行列として受け取ったあとで普通に解きます.
B. DAG
入力のグラフを reverse して解きます(あるいは各点について,そこまで到達可能な点を数える).
C. Segment tree or Fenwick?
複数テストケースについて同じデータ構造を使いまわします.
D. Dijkstra
priority queue から「最大要素(頂点番号は最小)」を取り出すようにします.同じ頂点から出る遷移は一度しか計算しないようにします.
E. Amazing bitset
答は $p^N+(1-p)^N$ ですが,$p^N\bmod{mod}$ と $(1-p)^N\bmod{mod}$ を計算したあと int で受け取って足し合わせることでオーバーフローを起こします.
F. Keep talking and nobody explodes – easy
それぞれのルールについて,true, false の場合に行うことを自由に反転させて,サンプルが合うようにします.$2^{20}$ 通り全探索します,実装は結構大変です.
G. Keep talking and nobody explodes – medium
F の強化版でルールが $40$ 個あります.各ルールについて if 文に現れる部分と変化させる部分の添字は disjoint になっています.よってルールの逆回しが可能で,半分全列挙ができます.
H. Who needs suffix structures?
想定解は rolling hash を使うもの(hash の衝突が起こるため「正しくない値」を出力する)です.hash の mod は問題文に書いてあるやつで,base は推測する必要があります.
ダウンロードテストケースから誤判定を行っている場合を抽出することで,$f(base)=0$ となる多項式 $f$ を列挙します.これらの共通の零点が base です.これは多項式 $f$ の gcd とると $1$ 次式が残って base が特定できるようになっています.
I. Deja vu
これも同様にハッシュの衝突が起こるような base を特定する問題です.mod は $2^{64}$ です.
$(N,K)=(128,64)$ に相当する入力があってここから $65$ 個のうちどれか $2$ つのハッシュが衝突することが分かります.が,$2$ つ組によっては衝突を起こる base が非常にたくさん出てきてしまいます(素数 mod ではないので $n$ 次多項式の根が $n$ 個を超えうる).そういう組を候補から外して調べればよいです.
あるいはサンプル文字列を char になおして読むと,衝突が最初・最後の部分文字列によって起こるという情報が読み取れるらしく,これで一意に base を復元できます.
復元は,$k=0,1,2,\ldots$ 順に $\pmod{2^k}$ での解を持ち上げていくことによって行えます.
J. Keep talking and nobody explodes – hard
F, G の強化版です.桁数が大きくルールひとつを flip したことの影響が少ないためか,焼きなましによって正しい解に到達できるようです.