2022/1/8に開催されたAtCoder Beginner Contest 234に参加しました。
2022年最初のABCコンテストになります。今年は昨年より競プロに力を入れて、どんどん上を目指していきたいので、今回はとりあえずレート上げを達成して初回のコンテストを終えられるようにという気持ちで臨むことにしました。
Rated参加します。2022年最初のコンテストは好結果で終えて良いスタートを切りたいもんですな。
— devgenjin77 (@devgenjin77) 2022年1月8日
AtCoder Beginner Contest 234 - AtCoder https://t.co/tI9ntY6RYQ
今回の結果
んで、今回の結果は5完。E問題に大分時間を取られたので、タイムは大分遅めだったという印象です。
パフォーマンスは緑の上位。とりあえずレートを上げることはできたので、最低限の目標は達成しました。
5完緑パフォでレート上げ!
— devgenjin77 (@devgenjin77) 2022年1月8日
この調子で今年中に水色行けるように頑張ります✊
devgenjin77さんのAtCoder Beginner Contest 234での成績:1887位
パフォーマンス:1116相当
レーティング:1019→1029 (+10) :)
Highestを更新しました!#AtCoder #ABC234 https://t.co/0XtED2Zi9t
振り返り
D問題までは順調にいってましたが、E問題でやたらと時間を取られてしまいました。
A問題
関数を定義し、関数を再帰的に呼び出して答えを求めるという問題。
問題文のとおりに実装し、ACを取ることができました。
提出コード
https://atcoder.jp/contests/abc234/submissions/28381813
B問題
二点間の距離の最大値を求める問題。制約上の最大はであり計算するパターン数としては最大でも程度なので、2重ループの実装で問題なし。
こちらも問題なくACが取れましたとさ。
提出コード
https://atcoder.jp/contests/abc234/submissions/28388630
C問題
入力例2を参考に愚直に小さい方から数え上げてみると、という感じで確かにが11番目に小さい数字となる。
で、よくよく考えるとこの数字の動き方が2進数を小さい方から数え上げたものに対して1を2に置換しただけのように見える。
確かに、11を2進数にすると1011となるので、結局答えは、入力を2進数の文字列に変換し、1を2に置換すればOK。
ということで、あとは実装だけしてACが取れましたとさ。
提出コード
https://atcoder.jp/contests/abc234/submissions/28391968
D問題
この問題は、もう少し単純に考えればよかったかと後悔しました。
先頭から愚直に番目に大きな数値を求めようとすると、TLEになりそうなこの問題。ということで先頭からでなく、配列の一番後ろまで先読みする方法が有効ではないかと思い付いた。
- の場合、番目に大きな値はで確定。この値をとして定義し、解答用の配列に追加
- 順列を後ろから見ていく。を参照し、より大きい場合は、現在のを使用済みの数値の集合に追加し、は集合に含まれない値になるまで1ずつマイナスしていく。が確定したら、解答用の配列に追加。
- 2の処理の要領でからまで順次処理する。
- 解答用の配列を、後ろから出力していく。
途中色々試行錯誤したが、出来上がった解法としてはこんなもん。結果として多少時間はかかりましたが、これでなんとかACを取ることが出来ました。
ただ、コンテスト後によくよく考えると、TreeSetを使って最小値を管理する方法の方がシンプルに実装できたかなーと反省。すこし問題を難しく捉えすぎたきらいもあります。
提出コード
https://atcoder.jp/contests/abc234/submissions/28401425
E問題
等差数というのが、一般的な用語なのかよくわからんかったのでググってみるも等差数列の結果しか出てこない。。
ということで、過去問とか典型の類は当てにならないだろうということで、自力で考えてみることに。
で、よくよく考えると、からぐらいまでに存在する等差数なるものは多くはないと思われるので、とりあえず前計算で等差数を全部出してからソートを行い、以上の最小の等差数を求めればよいのではと考えた。
で、どうにかして実装をしてみたものの、これが無限ループやOutOfMemoryになったりと散々な結果に。。実は等差数って結構いっぱいあるのでは??
しかも順位表から見るにこの問題、やたらとACが多く、これを落としてしまうと緑パフォすら怪しくなるという感じ。
このE問題は絶対に通しておきたいところですが、算出する等差数の桁数を限定してみたりなどしてみたものの、無限ループは治らずで、解決方法がわからずのまま、どんどん時間が過ぎていきました。。
で、よくよく確認してみると、ループ内の処理が盛大にバグっていることが判明するというオチ。。
なんやかんやで、実装からバグ治しまで40分程度かかってしまうことになりましたが、結局当初の解法でなんとかACを取ることが出来ましたとさ。
提出コード
https://atcoder.jp/contests/abc234/submissions/28412322
F問題
15分程度しか残っていない状態でしたが、問題を読んでみることに。しかし、解法は全く思いつかずで、結局時間切れとなりました。
これは後日解説ACしておこうと思います。
G問題
問題はチラ見してみましたが早々に諦め。
Ex問題
問題すらみれておりません。
これまでの実績
2022年はHighest更新という良いスタートを切れました。ここからなんとか水色を目指して頑張っていきたいです。
総括
今回は5完をキープ出来たというところでしたが、D問題はもっとシンプルに考えることはできたし、E問題は盛大にバグらせて時間を無駄にしたりなど色々と反省も多い回でした。
順位表から見ると、5完60分で水色パフォまで出たというところみたいだったので、今後はどうすれば早く正確に解けるかというのも考えていかないといけませんね。
当面は、水色コーダーになることを目標にするので、まずは過去問の青Diffまでの問題を解くことと、数を多く解いて実装力を高めるということをやっていこうと思います。
ということで、また次回も頑張ります。