AtCoder Beginner Contest 188 参加記

2021/1/10に開催されたAtCoder Beginner Contest 188に参加しました。

atcoder.jp

前日に行われたARC111は0完という残念な結果で、緑転落ギリギリのレーティングまで落とされてしまいました。今回は、このマイナスを少しでも取り戻そうという気持ちで臨むこととしました。

今回の結果

そして肝心の結果は、4完終了という微妙な結果となりました。

ABC188結果

ABC188結果

終わった瞬間、正直茶色転落もあるかと思ってましたが、ことのほかパフォーマンスは上々で、なんとか前回下げた分の半分程度のレートを戻すことに成功しました。

振り返り

Cで少しまごついて、だいぶタイムロスしてしまいました。

ABC188提出結果

ABC188提出結果

A問題

A - Three-Point Shot

|X - Y| \ge 3の場合"No"、それ以外は"Yes"を出力。問題なくAC。

B問題

B - Orthogonality

 問題文のとおり計算するだけ。

B問題でも、これではあまりにも簡単だと思い、実は罠があるのかと念のためlongで計算するなどしたが、その必要もなかったみたい。

問題なくAC。

C問題

C - ABC Tournament

トーナメントの左の山の中でレートが一番高い人と右の山の中でレートが一番高い人を探しだし、その2人のうちレートの低い方を割り出せばよい。

というわけで、入力配列を真ん中で分割して、それぞれ左の山、右の山で最高値を探せばOK、ということで実装してみましたが、投げてみるとなんとこれが大量のWAを吐き出してしまう。。

ソースのどこをみても原因が良くわからず。もう苦し紛れに配列サイズをN^2としているところを、実際の配列のサイズを取りに行ったら、これがなんとAC。

そんなこんなの謎の現象でCを突破することができましたとさ。

D問題

D - Snuke Prime

 Cで大分ロスをしてしまったが、なんとか気を取り直して臨んだD問題。

問題文を見ると、なんだか、いもす法で解けそうな感じだが制約がそれなりにでかいので、すべてを配列で処理するとおそらくTLEかなんかが起きそうな感じがする。

ということで、いもす法と座標圧縮の考え方を組み合わせて考えてみることに。

a_i日目に、サービス料金の合計がc_i円増加し、b_i + 1日目にc_i円減少すると考え、あとは、現在の個々のサービスの料金の合計と、プライム料金の低い方に、次の料金の増減が発生するまでの日数を掛けた値を積み上げていけばOK。

なんとかバグもなく実装できて、あっさりACがとれました。

E問題

E - Peddler

残りEとFの問題のうち、順位表を見ると明らかにEの方が解いてる人が多かったので、とりあえず残りの30分ちょいの時間をEにつぎ込んで5完を目指すことに。

で、問題を見ると、DPを使うのか、DFSを使えばなんとかいけそうな感じがするのだが、これといった具体的な実装方法がなかなか思いつかない。。

結局、悩んでいるうちに時間だけが過ぎてしまい、結果時間切れとなりました。

F問題

F - +1-1x2

Eと心中したので、問題すら見れてません。

これまでの実績

とりあえず、茶色転落は免れましたが、今後も油断できない状況です。

コンテスト実績

コンテスト実績

総括

いつものABCでは、60分の4完だと緑パフォも怪しいのですが、今回はD問題の難易度がちょうど良かったので、結果的にレートを上げることができました。

ですが、この調子で4完終わりの結果を出し続けてると、いつかは頭打ちになるのも目に見えているので、なんとか安定して5完以上が狙えるような実力をつけたいです。

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