AIM Tech Poorly Prepared Contest

「解説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 したことの影響が少ないためか,焼きなましによって正しい解に到達できるようです.

CodeForces
スポンサーリンク
シェアする
maspyをフォローする
maspyのHP
タイトルとURLをコピーしました