Cの条件分岐の実装でどハマりしてしまったが、基本的に考え方は合ってた。本番で慌てないのが大事。Dも累積和でやることには気づけたのでまぁよしとしよう。
内容
- Python3でやっている。
- 参加ログ。
- 所感。
- コンテスト中に何を考えたか。
- コンテスト後に解説をみたり、少し整理したりしたくらいの内容。
- 問題の詳細で細かく書こうと思うものは別記事とする。
結果
ABC完。ABは順調に終わって、Cも3で割ったあまりが0, 1, 2の場合分けまではわかってたのに、WAを連発してしまった・・・。Cで時間使いすぎたが、Dで挽回できそうと思ったが、2重の累積和を1度のforで書き上げられず終了。
どう考えたか + α
A - twiblr
問題タイプ:数式
文意から可能な最大値からを引けばいい。
a, b = map(int, input().split()) ans = (a * 2) + 100 - b print(ans)
B - Almost GCD
問題タイプ:最大公約数の話と思いきや。。。
一瞬?っとなったが、なので、
を
から
で順番にforで回して割って、余りが0になるものを数えて、カウントが最大の時のiの値が答えとしていい。(今回の実装だとGCD 度が最大のもののうち、最小の値となる。)
maxv = 0 ans = 0 for i in range(2, 1000+1): cnt = 0 for a in A: if a % i == 0: cnt += 1 if maxv < cnt: maxv = cnt ans = i print(ans)
C - To 3
問題タイプ:mod、3の倍数、条件分岐
ポイントは、答えが0, 1, 2, -1しかないということ。
を3で割った時の余りがいくつかで場合分けする。
- さらにその後に各桁の数値が3の倍数かどうかで場合分けしてその数をカウントする。
- この値によって答えをだし分ける。
- 消せる桁数は
未満とすることを条件に入れるのを忘れずに。
別記事にする。
D - Wandering
問題タイプ:累積和
番目までの累積和と
番目までの累積和の最大値を使って求める。
別記事にする。
おわりに
今回は、時間はかかってWA連発だがABC完答できたのはよかった。条件分岐は、厳しくみているつもりでも穴があって、今回はダメなパターンを見つけられて実装を直せたが0ベースで考えるのはやはり難しい。引き続き精進する。
参考になる書籍
- 問題解決力を鍛える!アルゴリズムとデータ構造
けんちょんさんこと、大槻さんの書籍である、「問題解決力を鍛える!アルゴリズムとデータ構造」 ご本人の記事の中で難易度は、螺旋本ということで初学者でも非常に結構読みやすい!!!(実際に、けんちょんさんの記事はC++に疎い自分でも、その思考プロセスを学べるくらい丁寧に書かれているし、この書籍も非常に読みやすい)どのようなステータスの人にもおすすめの一冊になっている。

問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)
- 作者:大槻 兼資
- 発売日: 2020/10/02
- メディア: 単行本(ソフトカバー)
書籍は読み終わったので、Pythonで章末問題をこなしていっている。