茶coderが1カ月だけ競プロをガチってみる

1カ月でどこまでいけるか。

【2日目】ABC181 5完達成!

まずは昨日のABC182-Fがまだ実装途中だったので、その続きから。 ついでに、mapにおける演算子[]の使い方を確認。

これがなかなか便利で、

map<string, int> mp;
mp["Alice"] = 18;

のように用いるのだが、もし該当する要素が存在しなければ自動でデフォルト構築してくれるという優れもの。

しかも、上記のようにvalueを指定しなくても自動で適当なvalueを代入してくれるので、

mp["Bob"] += 20;

のようにしても、きちんと要素("Bob", 20)が追加される。便利。

それが終わったので、今日はABC181に挑戦。今回もバーチャル参加。結果↓ f:id:danook:20210407165742p:plain

なんと!!

5完達成!!!

時間はめっちゃかかりましたが(;´・ω・)

以下はD以降の問題について振り返っていく。

D - Hachi

atcoder.jp

自分は

Sに含まれる数字から作れる3桁の各数字列について、8の倍数かを調べる

ことで実装したのだが、解説にあるように

各3桁の8の倍数について、Sに含まれる数字から作れるかを調べる

方が計算量少なくて済んだ。今はどちらでも時間的に余裕があるので良いけれど、こういう所も見極められるようになっていきたい。

E - Transformative Teacher

atcoder.jp

何とか時間内に正解したものの、結構危なかった気がしている。E問題くらいになると、偶奇の場合分けや境界条件を考えなくてはいけないものが増えてきて、大体そこで突っかかって時間内に終わらなくなっている気がする。そこは何か対策を練っておきたい。あと、あれ添字2i+1だっけ2i-1だっけ…?みたいのを考えるのにものすごく時間がかかっている。そこが恐らくできる人との差なのだろう。

あとは、上で場合分けと書いたが、きっと工夫すればこのくらいは場合分けなしで解けるのだと思う。解答例のコードでは恐らくそうなっていた。が、自分にはそれをパッと見ても何が起きているのか分からないのでその読み解きは明日やります…

Fは明日再チャレンジ。上記のことも明日やる。