Educational Codeforces Round 21

スポンサーリンク

A. Lucky Year

候補となる数 $a\times 10^b$ は少ないです.

B. Average Sleep Time

累積和の前計算のもと区間和がとれる.

C. Tea Party

まず半分以上になるまで入れます.そのあと,$a$ が大きいところから順に,入れられるだけ入れていきます.

D. Array Division

動かしてから切るのではなく,切ってから動かすことを考えます.切る場所を決めたあと左グループから右グループ(または逆)にどのような値を動かすと和が等しくなるかを計算し,それが可能かを判定します.

E. Selling Souvenirs

重みの種類数が少ないナップサック問題です.

最大重みのところだけ求めればよいので,2 種だけ畳み込んだあと 3 種類目の個数を全探索すればもっと易しい解になります.

F. Card Game

二分探索します.二分探索内は,0, 1 列を定める最適化問題です.$x_i=1$ のとき $p$ 獲得.ある組 $(i,j)$ について $x_i=x_j=1$ ならば $-\infty$ 獲得.という要領です.

この制約は最小カットで書けません.

$c_i=1$ であるようなものを使うか否かを固定すれば,禁止制約が二部グラフの反対側の部分に入るので,片方の部分の $x_i$ の意味を反転しておくことですべてを最小カットで表現できます.

G. Anthem of Berland

$t$ だけから作った trie に Aho-Corasick 法で suffix link をはっておきます.(KMP と呼ばれているものと同じはず)

$s$ が $t$ を含む回数は,この trie を遷移することで数えられます.したがって “?” が含まれている場合の最適化は,「trie のどのノードに居るか」を状態として 1 文字ずつ決めていく dp により解けます.

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