2020年4月3日金曜日

AtCoder Beginner Contest 155

 Dができず三完でした。
 順位的にはひどいのですが、
 Eが多く解かれているのには気付いていたけどDの解法は分かっていたので実装したかった、かつ、Dは若干Pythonに不利な問題だった、という事情があるので、まあ。

コンテストへのリンク

D - Pairs

・二分探索を使って、答えの数より大きい数がK個以上あるかを調べる

 という方針はOK。
 あとは、Aをソートしてあれば、N*Nのマス(の半分)のうちで、Kより大きいものが何個か? を各行について二分探索で求めればOK。(ただし、負の数に注意)

 ……なのですが、Python/PyPyだと実行時間的にこれを通すのは厳しい。(numpyを上手く使えば通るのかな)

 よく考えると、これは尺取り法を使って実装することもでき、これならPython/PyPyでも通せます。

 いやでも、二分探索→二分探索の方が実装が楽だと思うので、これで通すのが厳しいのはちょっと辛い気がしてしまう。

E - Payment

 コンテスト中に問題文は読みましたが、解法がすぐ思いつかず、思いついているDに専念しました。
 DPだと言われれば解けますが、ちょっと気付きにくい。言われてみれば。

F - Perils in Parallel

・区間の操作を考えるのは大変→階差を取ることで、二ヶ所切り替える操作になる

 ということを思いついた上で、

・グラフへ帰着

 すればOK。
 どちらも重要そうだけど、どちらも全く気付けなかった。頭に入れておきたい。

 二つ目に関しては、以前書いた通り、Codeforces Round #616のC. Prefix Enlightenmentと似た発想だと思う。短期間に二回同じ手法が出題されているので、身に着いていて欲しいなぁ。

 この問題は、グラフに帰着した後の実装は難しくないので、ちゃんと解法が身に着いているかが問われている印象。

0 件のコメント:

コメントを投稿