AtCoder Grand Contest 063 参加記

2023/7/31に開催されたAtCoder Grand Contest 063に参加しました。

atcoder.jp

まだ入水できていない状況ゆえ、今回もRated参加はできませんでしたが、経験を積むために参加するという感じです。

とりあえず、今回も1完以上が目標です。

今回の結果

なんとか1完確保しました。

AGC063結果
AGC063結果

Unrated参加につき、もちろんレートの変化はなし。

仮にRatedだったら水パフォはあったようで、少し勿体無い気もしますが、まあこれも仕方なしです。

振り返り

Bは惜しいところまで行きましたが、解き切ることができませんでした。

AGC063提出結果
AGC063提出結果

A問題

A - Mex Game

プレーヤーが取れる戦略としては、相手が勝ちとなる数を小さい順から指定していくことで相手の勝ちを減らしていくというのが最適なように思える。

サンプルで試しても確かにその通りになるということで、早速実装に着手。

Aliceの手番の場合、S内にあるBの位置で、まだXに設定されていない数をxとして指定(無い場合は何も指定しない)。逆にBobの手番では、S内にあるAの位置で、まだXに設定されていない数をxとして指定する処理を行い、各ターンごとのmexにある文字で勝者を出力するという実装で提出。これが、なんともあっさりと通ってくれました。

12分40秒で1完。とりあえず0完が回避できて、良かったです。

提出コード

https://atcoder.jp/contests/agc063/submissions/44111024

B問題

B - Insert 1, 2, 3, ...

1から始まる列でないと、生成可能にならないと思われるので、Lの候補としては、A_i = 1となるiに限定される。

また、Lを固定してRを右に伸ばした場合、途中で生成不可能な列になったら、それ以降は生成可能にならないと思われる。

よって、A_i = 1となるi全てに対して、それぞれをLと設定した時に、どこまで生成可能な列として右に伸ばせるかが計算できれば答えは求まるかと。

が、、それを実際に形にするのは中々難しい。。

まずは、各列に対してどこまで右に生成可能な列として取りうるかを管理する配列Bを管理することを試してみる。これで、Aを後ろから見ていき、[tex:A_i + 1 = A{i + 1}]の場合に[tex:B_i = B{i + 1}]とすれば、繋がり管理できるのではと思いましたが、微妙に上手くいかず。。

一応、途中で途切れた場合は一旦スタックに要素を積むなどの処理も施すことで、サンプルまで通すことはできましたが、実際提出してみると半分ぐらいがWAという散々な有様。。

そんなこんなで、とりあえず2時間弱取り組んで見ましたが、WAの原因が見えずで、この問題は諦めることに。。

コンテスト残り時間も1時間弱はありましたが、他の作業もあったので、結局今回は1完で撤退することにしました。

C問題

C - Add Mod Operations

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

D問題

D - Many CRT

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

E問題

E - Child to Parent

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

F問題

F - Simultaneous Floor

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

これまでの実績

UnRatedにつき、レート変化はありません。

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

総括

解説を見てると、今回のB問題も惜しいところまで来てたかという感じでしたが、ここでACを取りきれないのが自分の実力不足というところですね。今回も1完取れたのが、せめてもの救いという所でした。

さすがに、AGCをUnratedで参加するのも今回限りにしたいところ。次回のAGCまでには入水できるよう、改めて精進に取り組んでいきます。

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