イバコの生存記録

いまは競プロ(AtCoder)記事がメインです。

34. AtCoderに初参加した

先日から苦戦していたリモートデスクトップ設定ですが、結局VPNサーバを立てるのは諦めて、普通にリモートデスクトップできるようにしました。ただ、ポート番号そのままは流石に怖いので、最低限のセキュリティとして適当なものに変えておきました。これで様子を見てみます。

 

さて、今日は AtCoder に初参加しました。

競技プログラミングは高校時代以来で、あの頃と比べると界隈のレベルもとんでもなく上がっています。とりあえず練習ページで提出までの流れは確認しましたが、どのような問題が出るのかロクに確認もせず、ほぼ大会初見という感じで挑んでみました。

ビギナー向けの ABC (AtCode Beginner Contest) というものでしたが、普通に難しかったですね。ABCE完答、Dは一部テストケースで時間切れになる不正解、FGExは問題を見る時間が無かった、という結果でした。

 

f:id:ibako_piyo:20220108230555p:plain

 

各問題の感想です。

A

書かれている通りに実装すれば良いだけの問題でした。
何故か綺麗なコードを書こうとして、無駄に時間を取ってしまいました。あんまり慎重すぎるのも良くないですね。

B

計算量削減がいるかな?と思いましたが、制約的に行けそうだったので愚直な実装で通しました。全然問題なかったです。

C

少し考えると、2進数に書き換えて1を2に変換するだけの問題だと気付きました。似たような問題を高校時代に解いた覚えが…。

D

計算量が問題になる系かな…と思っていましたが案の定そうでした。
最初の提出は普通に非効率だったので、もう少し考えて、「新しく得られた数が小さければ前回の結果から変わらない」「大きければ、前回まででソート済みの配列から入れるべき場所を見つけて、一番小さいやつを追い出して突っ込む」みたいな処理にしたのですが、(少し改善しましたが)これでも時間切れでした。うーん?まぁ解説を読んで勉強します。

と、解説を読むと考え方は合っていて、最後の一手が足りていませんでした。「前回までソート済みの配列から入れるべき場所を見つける」という処理が線形探索だったのですが、ここを改善すれば良かったようです。

実はこの改善点は気付いていた(二分探索すればもっと速くなると気付いていた)のですが、実装の重さと残り時間を考えて試すまでに至りませんでした。解説的には「優先度付きキュー」を利用すれば良かったようです。ああ、そんなデータ構造もあったな…。

E

各位の数にバラして1桁目と2桁目であるべき差を見ます。先頭桁から順番にスキャンして、非等差な箇所があればその桁を +1 して以降は 0 にします。+1 した結果その桁の数が 10 になったら、繰り上げ計算のような処理を入れます。

…という感じの実装にしました。もっと良い方法がありそうな気もしますが、時間が無かったので思いついたものを愚直に実装しました。運良くバグらず通せました。

F, G, Ex

時間無くて見てないです。

 

 

反省点としては、「簡単な問題に時間を掛けすぎない」「綺麗なコードを書こうとしすぎない」「沼ってる問題を引きずらない」というところでしょうか。

しかし、上位勢のタイムを見るととても同じ人間とは思えなかったですね…。純粋にすごい。