パナソニックプログラミングコンテスト(AtCoder Beginner Contest 195) 参加記

2021/3/13に開催されたパナソニックプログラミングコンテスト(AtCoder Beginner Contest 195) に参加しました。

atcoder.jp

前回のABCでは5完という結果を残し、余裕の緑復帰を果たすことができました。以前到達したHighestレートまで後少しというところなので、今回でHighestを更新するという気持ちで臨みました。

今回の結果

で、肝心の結果ですが、3完というなんとも微妙な結果に。。

ABC195結果

ABC195結果

しかし!今回難易度が高目だったのか、3完でも緑パフォが出ており、レートはプラス。なんとかHighestを更新することができました!

振り返り

今回は、Bから結構手強かった印象です。

ABC195提出結果

ABC195提出結果

A問題

A - Health M Death

HMで割った余りが0ならYesを出力、そうでないならNoを出力する。

問題なくAC。

B問題

B - Many Oranges

Bにしてはなかなか手強い問題で少し詰まってしまった。。

単純に、 WABで割った結果を切り上げたり、切り捨てたりすれば良いわけでなく、入力例3にあるような、UNSATISFIABLEになる条件も加味しなければならない。

色々悩んで、時間の方も結構経ってしまったところ、ふと思いついたのが、それぞれの個数に対して全て最小値Aだった場合と、全て最大値Bだった場合を計算し、その間の数字なら作ることができるとする方法。

この方法で実装してなんとかACをとることができました。

提出ソース

https://atcoder.jp/contests/abc195/submissions/20880890

C問題

C - Comma

問題の意味はわかるが、実装でなかなか苦労しそうな問題。

上手く実装しようとすると、色々バグらせそうなので、結局カンマを1つ書くパターンから5つ書くパターンまで全部場合分けしたゴリ押しのソースを書いてなんとかACが取れました。

参考ソース

gist963b9decb6b8077b5c6691082e568e94

カンマ5個のケースが上限値を意識してしまっているのはご愛嬌です。

D問題

D - Shipping Center

問題をみた瞬間、RMQの一種かな?と思ってしまった。

というわけで、RMQについて色々ググってみたものの、使えそうなものはなし。

結局あれこれ色々と考慮したものの、効率的に各クエリを処理する方法は思いつかずで、そのまま時間切れとなってしまいました。

で、解説などをみると、結局各クエリで独立で解く問題だったということで、解法を検討するフェーズからすでに間違っていたということがわかりました。

E問題

E - Lucky 7 Battle

7の倍数の判定方法などググってみたものの、使えそうな方法はなし。

そして、まったくもって解法が想いつかず のため、早々に諦めました。

で、解説をみると結局7の倍数かどうかは自力で計算するんだということがわかり、かなり見当ハズレのことをしていたことが判明しましたとさ。

F問題

F - Coprime Present

問題すらみれておりません。

これまでの実績

なんだかんだで、一応ギリHighestを更新できましたとさ。

コンテスト実績

コンテスト実績

総括

今回、Bが手強かったのもありますが、D、E問題の検討のところで、まったく方向違いのことをやっていたが痛かったなーと。この辺りを改善するには、やはり過去問を解く量をもっと増やしていくしかないんでしょうなー。

というわけで、また、次回も頑張ります。