AtCoder Beginner Contest 296 参加記

2023/4/1に開催されたAtCoder Beginner Contest 296に参加しました。

atcoder.jp

先週は所用で不参加だったため、2週間ぶりの参加となります。

直近のARCでの爆死なんかもあり、現状レートが低迷しているので、なんとか今回は水パフォを取ってレートを上げていこうという感じで臨みます。

今回の結果

なんとか5完を達成することができました。

ABC296結果
ABC296結果

そして、堂々の水色パフォーマンスを達成。レートの方は、再度1100台に戻すことができましたとさ。

振り返り

D問題でつまづいてしまいましたが、なんとかE問題でリカバリすることができました。

ABC296提出結果
ABC296提出結果

A問題

A - Alternately

文字列Sの中に、FFMMがあればNo。それ以外はYesという実装でACがとれました。

1分24秒で1完。

提出コード

https://atcoder.jp/contests/abc296/submissions/40207487

B問題

B - Chessboard

盤上の*の位置を0-indexedで検索し、適切に変換するだけ。

すこし時間がかかりましたが、問題なくACが取れました。5分29秒で2完。

提出コード

https://atcoder.jp/contests/abc296/submissions/40213425

C問題

C - Gap Existence

X=0の場合は、必ずYesとなる。

上記以外の場合、配列Aの全要素をSetに突っ込んでから、A_i - Xとなる値がSetに存在すればYesとなる。

これも、実装に少し時間がかかってしまいましたが、問題なくAC。12分16秒で3完。

提出コード

https://atcoder.jp/contests/abc296/submissions/40221134

D問題

D - M<=ab

制約から察するに、\sqrt{N}\sqrt{M}を上限として全探索するやつかという印象。

まず、N \ge Mの場合は、Mが作れるのが確定しているので答えはM

上記以外の場合は、a \le bと定義したとき、aの下限を\lfloor M \div N \rfloor、上限を\lceil \sqrt{M} \rceilとし、その区間を全探索。M以上となる a \times bを求め、その中の最小値が答えとなる。

と、、いう感じで実装すべきだったのですが、当初はaの上限を a^{2} \le Mにしていたため、6WAを喰らってしまい、その後も見当外れの修正を投げ続けたため、ペナルティを喰らいまくってしまいました。

結局、探索の上限が怪しそうだということにやっと気づき、探索上限を少し緩めるという緊急回避的な実装でなんとかAC。

50分56秒4ペナで4完。ペナ分も含めて40分程度損している計算になるので、なかなか痛いミスです。

提出コード

https://atcoder.jp/contests/abc296/submissions/40243445

E問題

E - Transition Game

問題の意図が捉えづらく、要点を掴むまで、10分程度を要してしまいましたが、要は操作回数として、どんなKを指定されても、その回数分遷移した後で作れるiが何通りあるかという問題の模様。

当初は、ダブリングっぽいかなあと思いましたが、実装のイメージがつかず。。

が、よくよく考えてみると、有向グラフの強連結成分が活用できるかなあという感じがしてきたので、とりあえずSCCライブラリに突っ込んで見ることに。

このとき、複数の頂点で強連結成分を構成している場合、その頂点全てが作れるiとなる。単一頂点で強連結成分になっている場合は、自己ループしている頂点であればOK。

という感じで実装したら、見事当たりだったみたいで、なんとかACを取ることができましたとさ。

82分10秒4ペナで5完。この時点で、3桁順位に乗ったので、なんとか今日は勝てたかなという感じでした。

提出コード

https://atcoder.jp/contests/abc296/submissions/40256650

F問題

F - Simultaneous Swap

とりあえず、時間があるので問題文をのぞいて見ましたが、なんかARCかAGCに出てきそうな問題という印象。

これは多分、転倒数を見て、できるかできないかを判別するやつだという直感があったのですが、実際のところ解法まで落とし込むことはできず。ここで時間切れとなりました。

結局、コンテスト後の解説をみると、やはり転倒数が絡む問題だったとのこと。実は、まだ転倒数のライブラリすら作ってない状態なので、これを機に整備を進めていきたいと思います。

G問題

G - Polygon and Points

とりあえず、チラ見をして見ましたが、何も思いつかず。早々に撤退しました。

Ex問題

Ex - Unite

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

これまでの実績

とりあえず、レートは1100台まで回復。今度こそ、この調子で入水まで一気に行きたいですね。

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

総括

今回はD問題で結構やらかしたのですが、なんとかE問題で解法が降りてきてくれたので水パフォが達成できました。

これでレートは少し回復しましたが、ここからさらに上げきることができるかどうかが肝心。次の土日はARCとABCがあるので、直近の過去問の復習をこなしながら、次回に向けて準備していきたいと思います。

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