AtCoder Beginner Contest 266 参加記

2022/8/27に開催されたAtCoder Beginner Contest 266に参加しました。

atcoder.jp

前回のABCでは、青パフォが出るという上々の結果でレートを大幅に上げることに成功しました。

今回のABCでは、前回の勢いを落とさない様に、まずはレート以上のパフォーマンスを出そうという気持ちで臨むこととしました。

今回の結果

前回に続いて、5完を達成しました!

ABC266結果
ABC266結果

水パフォを叩き出すことに成功し、前回に続いてレートはHighestを更新!さらに水色コーダーに近づくことが出来ました!!

振り返り

C問題で大きく手こずったことが反省点です。

ABC266提出結果
ABC266提出結果

A問題

A - Middle Letter

文字列Sの長さをTとした時、0-indexedで、 \lfloor \frac{T}{2} \rfloor文字目を出せば良い。

ということで、実装して1回の提出で問題なくACが取れました。

1分47秒で1完。

提出コード

https://atcoder.jp/contests/abc266/submissions/34369403

B問題

B - Modulo Number

普通に、N mod 998244353を計算すれば良いというのであれば簡単だが、そうはいかないと思われる。

とりあえず、上記の要領で計算してみると、やはりNがマイナスの時に計算が合わない。

ということで、マイナスの場合は、998244353を足してみることで帳尻を合わせる実装をすることに。

これでなんか嫌なケースがあったら困るなあという気持ちで提出しましたが、なんとか無事ACを取ることができました。

9分2秒で2完。

提出コード

https://atcoder.jp/contests/abc266/submissions/34376842

C問題

C - Convex Quadrilateral

苦手意識のある、二次元上の角度を求めるような問題。

解法を検討してみるものの、角度計算の方法をさっぱり忘れており、時間を溶かしてしまう。。

とりあえず10分ほど経ったところで、いったんこの問題からは撤退。D問題以降に着手することにしました。

ーーー

で、D、Eと解いたところで戻ってきたC問題。とりあえず、平面上の3点間の角度を計算する方法をググればなんとかなるかというところで、調査を開始。

すると、外積を計算すればよいとかなんとか説明している、いい感じの計算できるコードを見つけたので、とりあえずコピペで自分のコードに実装。

あとは、A→B→C、B→C→D、C→D→A、D→A→Bのそれぞれ4パターンで3点間の角度を計算し、判定することでなんとかACを取り切ることが出来ました。

88分58秒で5完。自身の知識不足のせいで、やたらと時間がかかったのですが、なんとか5完を確保することができました!

提出コード

https://atcoder.jp/contests/abc266/submissions/34401948

D問題

D - Snuke Panic (1D)

多分、DPすればいい的な問題。ということで、以下のDPを構築してみる。

  • dp\lbrack i \rbrack \lbrack j \rbrack := 時刻iの時点で、地点jにいる時に得ることができる最大の得点。

  • 遷移は、dp\lbrack i \rbrack \lbrack j \rbrack = max(dp\lbrack i - 1 \rbrack \lbrack j - 1 \rbrack, dp\lbrack i - 1 \rbrack \lbrack j \rbrack, dp\lbrack i - 1\rbrack \lbrack j + 1 \rbrack) と計算し、その時点で、すぬけ君を捕まえることができるならば、得点をプラスする。

と、こんな感じで実装したら、サンプルの1部が合わず。。

調べてみると、時刻0の時点で地点0にいる前提を考慮しないとダメということみたい。

ということで、DPの初期値を、dp\lbrack 0 \rbrack \lbrack 0 \rbrack = 1と最初に1点とっていることとし、遷移の処理で、得点が0のケースを無視して、最後に1点引くという小細工をすることで対処してみる。

とこんな感じでサンプルが通る実装を作り、提出したら、なんとかACをとることができましたとさ。

39分31秒で3完。とりあえず、C問題を抜かしても大怪我はしなさそうな感じです。

提出コード

https://atcoder.jp/contests/abc266/submissions/34389206

E問題

E - Throwing the Die

数回前のABCにスゴロクのDPをするような問題があり、それを復習している時に、期待値の計算とかを勉強してたので、多少とっかかりやすかった問題。

とりあえず、立てた方針としては、この問題の答えをf(N)とした時、N回目に出た目がf(N - 1)より大きい場合、ゲームを終了させ、そうで無い場合は期待値f(N - 1)が取れるものとして計算することに。

で、結果サンプルが無事通る実装ができたので提出したら、一発でACを取ることが出来ましたとさ。

58分51秒で4完。これでなんとか緑パフォ上位は行けそうかという印象でした。

提出コード

https://atcoder.jp/contests/abc266/submissions/34394869

F問題

F - Well-defined Path Queries on a Namori

一応問題文を見て、検討したものの、いい感じの解法は思いつかず。

とりあえず、10分ほど程度経過したところで、この問題を諦め。

多少は順位が上がるだろうということで、C問題に取り組むことにしました。

G問題

G - Yet Another RGB Sequence

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

Ex問題

Ex - Snuke Panic (2D)

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

これまでの実績

前回につづいて、レートは大きく上昇。水色コーダーへ、また一歩近づくことが出来ました。

コンテスト実績
コンテスト実績

総括

今回は、C問題で苦戦したものの、なんとか優先順を決めて対応したことで、最低限の結果が確保できたのが良かったかと思います。

今後のABCでは、水色パフォ以上の結果を出し続けることを目標とし、青Diff以下の問題までは過去問の精進に取り組むという感じで進めていこうと思います。

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