Educational Codeforces Round 81

スポンサーリンク

A. Display The Number

$71111$ のような形.

B. Infinite Prefixes

$t$ の prefix は「$s$ をいくつか並べたあと $s$ の適当な prefix をつけた」というものです.つける $s$ の prefix を固定して数えます.

C. Obtain The String

$T$ の $1$ 文字目から順に,$S$ の中で最後に選んだ要素より後に現れるなるべく早い出現をとっていく貪欲をします.

D. Same GCDs

$d=\gcd(a,m)$ とします.$0\leq x<m$ より $a+x\bmod m$ は $[0,m)$ を一通り動くので,$\gcd(x,m)=d$ かつ $0\leq x<m$ となる $x$ を数える問題になります.$d$ で割ればこれは $\gcd(x,m/d)=1$ かつ $0\leq x<m/d$ となるものの数え上げと等しく,Euler の totient 関数です.

E. Permutation Separation

選ぶのは,最初の列の切り方と,最後の列の切り方です.「最後の列の切り方」をスライドさせながら,「最初の列の切り方」ごとに対するコストを管理することを考えると,区間加算と最小値取得の遅延セグメント木で解けます.

F. Good Contest

座圧して,作る列の値の種類数を $O(n)$ にして考えてみます.そのまま座圧して dp すると圧縮した区間内での単調性がよく分からなくなりますが,その値を現時点でいくつ選んでいるという情報を持って,その値の全部選び終わったときに元の列の数え上げに置き換えれば計算できます.

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