2021/3/13に開催されたパナソニックプログラミングコンテスト(AtCoder Beginner Contest 195) に参加しました。
前回のABCでは5完という結果を残し、余裕の緑復帰を果たすことができました。以前到達したHighestレートまで後少しというところなので、今回でHighestを更新するという気持ちで臨みました。
パナソニックプログラミングコンテスト(AtCoder Beginner Contest 195) - AtCoder https://t.co/UGLqEBxYRL
— devgenjin77 (@devgenjin77) 2021年3月13日
参加いたします。Highest更新できるように頑張ります。
今回の結果
で、肝心の結果ですが、3完というなんとも微妙な結果に。。
しかし!今回難易度が高目だったのか、3完でも緑パフォが出ており、レートはプラス。なんとかHighestを更新することができました!
次も頑張る!以上。
— devgenjin77 (@devgenjin77) 2021年3月13日
devgenjin77さんのパナソニックプログラミングコンテスト(AtCoder Beginner Contest 195)での成績:2706位
パフォーマンス:878相当
レーティング:854→856 (+2) :)
Highestを更新しました!#AtCoder #パナソニックプログラミングコンテスト(ABC195) https://t.co/hsZhiZ5L5a
振り返り
今回は、Bから結構手強かった印象です。
A問題
をで割った余りが0ならYesを出力、そうでないならNoを出力する。
問題なくAC。
B問題
Bにしてはなかなか手強い問題で少し詰まってしまった。。
単純に、 をやで割った結果を切り上げたり、切り捨てたりすれば良いわけでなく、入力例3にあるような、UNSATISFIABLEになる条件も加味しなければならない。
色々悩んで、時間の方も結構経ってしまったところ、ふと思いついたのが、それぞれの個数に対して全て最小値だった場合と、全て最大値だった場合を計算し、その間の数字なら作ることができるとする方法。
この方法で実装してなんとかACをとることができました。
提出ソース
https://atcoder.jp/contests/abc195/submissions/20880890
C問題
問題の意味はわかるが、実装でなかなか苦労しそうな問題。
上手く実装しようとすると、色々バグらせそうなので、結局カンマを1つ書くパターンから5つ書くパターンまで全部場合分けしたゴリ押しのソースを書いてなんとかACが取れました。
参考ソース
gist963b9decb6b8077b5c6691082e568e94
カンマ5個のケースが上限値を意識してしまっているのはご愛嬌です。
D問題
問題をみた瞬間、RMQの一種かな?と思ってしまった。
というわけで、RMQについて色々ググってみたものの、使えそうなものはなし。
結局あれこれ色々と考慮したものの、効率的に各クエリを処理する方法は思いつかずで、そのまま時間切れとなってしまいました。
で、解説などをみると、結局各クエリで独立で解く問題だったということで、解法を検討するフェーズからすでに間違っていたということがわかりました。
E問題
7の倍数の判定方法などググってみたものの、使えそうな方法はなし。
そして、まったくもって解法が想いつかず のため、早々に諦めました。
で、解説をみると結局7の倍数かどうかは自力で計算するんだということがわかり、かなり見当ハズレのことをしていたことが判明しましたとさ。
F問題
問題すらみれておりません。
これまでの実績
なんだかんだで、一応ギリHighestを更新できましたとさ。
総括
今回、Bが手強かったのもありますが、D、E問題の検討のところで、まったく方向違いのことをやっていたが痛かったなーと。この辺りを改善するには、やはり過去問を解く量をもっと増やしていくしかないんでしょうなー。
というわけで、また、次回も頑張ります。