Educational Codeforces Round 191

A. AI Project Development

二分探索しました.線形探索でも解けます.

B. Different Distances

問題設定と「$2\leq n$ で常に解がある」という情報から,$n=2$ の解と $n=3$ の解を並べていけばよいことが分かります.

$n=3$ はサンプルを使って,$n=2$ は自力で 12212112 を発見しました(プログラミングの方が早かったかも).

C. Cost of a Bracket Sequence

開きカッコと閉じカッコを,いくつずつ削除するかというのを決めます.

すると,開きカッコは先頭に近いもの,閉じカッコは末尾に近いものを削除するとしてよいです.$O(N)$ 通りの候補をそれぞれ $O(N)$ 時間かけてチェックすればよいです.

チェックをセグメント木でやって,差分更新を使えば,$O(N\log N)$ 時間でも解けるはず($O(N)$ 時間にもなるはず).

D. Goods on the Shelf

最初から条件を満たしていたら YES です.そうでないとして,$2$ 成分に分離している値 $x$ に注目します.

この値 $x$ に注目するだけで,操作候補を $O(1)$ 通りにできます.

$x$ のある左端または右端はいじる必要があることに注目すると分かりやすいと思います.

E2. Permutation Transmission (Difficult Version)

下位 bit から見ていこうとしていましたが私は失敗しました.

上位 bit から見ていきます.最上位 bit は,必ず頻度最小になります.また,頻度最小の bit は最上位 bit を含むいくつかです.

これはなぜかというと,「次の $2$ べきのところまで」行くとどの bit も半分ずつ現れます.最上位 bit は,そこまで行く過程ですべてが $1$ であるような bit です.したがってこれは頻度最小だし,同じく最小になるためには「次の $2$ べきのところまで」がすべて $1$ である必要があります.

さらにこのような bit が $n$ 個あるとして,条件は

  • 上位 bit のどれかが $0$ であるような,$2^n-1$ 種の上位 bit パターンに対しては下位 bit パターンが全種類ある
  • 上位 bit がすべて $1$ であるような上位 bit パターンについては,下位 bit がより小さいサイズの部分問題の解になっている

という形になります.前者の必要条件はチェックして,その上で上位ビットは区別不可能なので適当な階乗を答にかけます.そして下位 bit に関する問題を再帰的に解きます.

あとはランダムテストが合うまで実装をなおして通しました.

F. Shortest GCD Paths

素因数の multiset に注目します.

ひとつの辺 $a\to b$ のコストは,次のように言い換えられます.

  • 素因数 multiset から削除する素因数全体の積を $x$ とする.
  • 素因数 multiset に追加する素因数全体の積を $y$ とする.
  • コストは $\max(x,y)$ である.

この言い換え問題で最短路を計算します.すると,$a,b$ は互いに素であり,$a$ の素因数は一回だけ捨てる,$b$ も素因数は一回だけもらう,という解の形を仮定できます.

するとさらに,最短路の計算で「$n$ 以下」という条件は無視してよいです.パスが使う比を全部ソートして,$1$ より小さい比を先に使っていけばよいです.この過程で整数じゃなくなってしまうことはありません.

あとは,捨てた素数の積,追加した素数の積を状態として dp をしました.計算量がやばい.

$1$ ステップで「捨てる素数」,「追加する素数」のどちらかは,ちょうどひとつの素数であるとしてよいです.それぞれの約数の個数を $n,m$ として,$O(nm(n+m))$ 時間程度?これに log が入ってるかも?で解くことができます.

1950ms かかっているし,怪しい計算量解法です.

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