2020年1月9日木曜日

Hello 2020

 今後、参加したコンテストにはできるだけメモを残しておこうと思います。(既に五日も経ってますが……)
 一応、解けた問題は解法を書きますが、厳密さは重視せず、箇条書きっぽく書きます。(解法ツイートの文字数制限ない版、という感じで)

 この回は、Dが解けず、Cまでの三完でした。

コンテストへのリンク


A. New Year and Naming


 実装問題

B. New Year and Ascent Sequence


 n個の配列から二つを選び連結したとき、$a_i<a_j (i<j)$ となる箇所が存在するものが何個あるかを全探索($O(n^2)$)せずに求める問題。

・そもそも、一つの配列に$a_i<a_j (i<j)$ となる箇所が存在すればどれと連結しても条件を満たす

・そうでないとき、その配列は大きい順にソートされている。

ので、条件を満たすためには、$a_1>a_2>a_3>...>a_n<b_1>b_2>...b_m$のようになっていれば良い.
→あとはソートして、二分探索を使うか、尺取り法でOK。

C. New Year and Permutation


 解法として思い浮かぶのは、

・DP or 数学的にcombinationなどを使う (or OEIS)

 といったあたりか。

→今回はDPは上手くいかないので、数学的に考える
→幅を固定すれば求まる

 幅$k$の配列がhappyになるとき、

- どの数字を選ぶか
- どの位置を選ぶか
- 中身の組み合わせ
- 残りの数字の組み合わせ

 を調べればOK

D. New Year and Conference


 D, Eはアルメリアさんのブログが詳しいです。私はこれを見て通しました。

・とりあえずソート

 は、良いとして、今回は、「開始時間でソートして区間を順番に見ていく」のほかに、「開始、終了時刻をまとめてソートして時間ごとにみていく」という方法があり、後者が正解。

・区間のままみるのではなく、時間ごとにみる

 という発想の転換が重要。

(区間のままでも解く方法はあるかもしれないけど分からなかった。遅延セグ木を使ったり、リストのHashを調べたりする解法もあったけど、この発想の転換は必須?)

E. New Year and Castle Construction


 偏角でソートは思いついていたけど、その後が考察できなかった。
 解説を読んで実装してみたけど、TLEが取れず。Pythonじゃ厳しい?

0 件のコメント:

コメントを投稿