AtCoder Beginner Contest 182 参加記

2020/11/8に開催されたAtCoder Beginner Contest 182に参加しました。

atcoder.jp

最近レートの上昇傾向が続いており、そろそろ入緑が見えているところです。

今回も4完以上であれば最悪レート下げが無いかなぐらいの気持ちで臨みました。

今回の結果

で、今回は個人的には上出来の5完達成!

ABC182結果

ABC182結果

そして、レートの方は大幅上昇。念願の入緑を達成できました!

振り返り

序盤で少しつまづきましたが、なんとかギリ5完達成しました。

ABC182提出結果

ABC182提出結果

A問題

A - twiblr

2 \times A + 100 - Bを計算すればOK。

問題なくAC。

B問題

B - Almost GCD

A_i \le 1000のため、2〜1000それぞれについてGCD度の数を求めて、それらの最大値を出せばOK。

の、、はずだったんですが、実戦では、こんなに愚直だとTLEするかもという疑念が頭をよぎり、なんとか効率化できないかというところを検討することに。

 

で、A_iの最大値の平方根を限度に計算してみたら、これがWA。。

 

じゃ、A_iを2で割った数を限度に計算してみたら、これがまたWA。。

 

 結局、素直にA_iの最大値を限度に計算して、やっとこさACが取れましたとさ。

C問題

C - To 3

「3の倍数 条件」でググってみたら、どうも各位の数字の和が3の倍数であればOKとのこと。ということで、以下の解法で実装してみることに。

  • 各位の数字の和Sを計算する。それが3の倍数なら、0が答え。
  • Sを3で割った余りが1の時、1,4,7のいずれかがNにあれば、それを引くと3の倍数になるので1が答え。そうでない場合、2,5,8のいずれかがNに合計2つあれば、2が答えになる。
  • Sを3で割った余りが2の時も同じ要領。2,5,8のいずれかがNにあれば、1が答え。1,4,7のいずれかがNに合計2つあれば、2が答え
  • これに該当しない場合は-1が答え

という要領で解いたらAC取れました。

 因みに、コンテスト後のTLをみると、bit全探索というキーワードが結構でてたんですが、その発想には至りませんでした。

D問題

D - Wandering

これは、愚直に計算するとTLEになるやつ。累積和を使って工夫をしていく。

サイズNの配列を2つ用意し、それぞれA_1 ~ A_iまで動いたときに

  • 最終的に正の方向にどれだけ動いたか。
  • 途中で、最大正の方向にどれだけ動いたか。

という結果をあらかじめ計算しておく。あとは上手い具合に計算してACが取れました。

E問題

E - Akari

 残り30分ぐらいで臨んだこの問題。

問題を一読して思いついた解法。とりあえずH \times Wサイズの2次元マップを作って、そこに電球とブロックを配置。あとは横方向を左右に、縦方向を上下に走査して、光を伝播させる要領でやればOK。

あとは実装してAC。と、、おもったが、なぜかサンプルが通らない。

とりあえずソースを見てみると、横に伝播した明かりが後で下にも伝播する下手くそ実装でバグっていたことが発覚。

もう残り時間も10分切ったぐらいでこの有様。惜しいとこまで行ってるのでなんとかならんかと知恵を絞ってみたら、縦方向に走査する用のマップと横方向に走査する用のマップを作って後で合算すりゃいいんじゃねということに気付く。

あとは時間に追い立てられながら、なんとか実装完了して、投げてみたら一発ACとなりましたーヾ(´∀`)ノワーイ

終了3分を切ってのAC。喜びもひとしおです。

F問題

F - Valid payments

問題は一読しましたが、解法がまったく思いつかないので早々に諦めでした。 

これまでの実績 

念願の入緑。AtCoder始めてから半年弱でやっとこさここまでたどり着くことができました。

コンテスト実績

コンテスト実績

総括

今の自分の実力だと、ABCクラスのコンテストでは全完は厳しいが、5完は現実的な目標になるかなという印象が抱けるようにはなりました。

今回は久々の5完でしたが、今後のABCは安定して5完程度の結果が残せるように精進していこうと思います。

また、次回も頑張ります。