くろたんく雑記帳

日常とか、わんちゃんとか、機械学習とか、競プロとか、

MENU

AtCoder Beginner Contest 182 参加ログ・感想

Cの条件分岐の実装でどハマりしてしまったが、基本的に考え方は合ってた。本番で慌てないのが大事。Dも累積和でやることには気づけたのでまぁよしとしよう。


内容

  • Python3でやっている。
  • 参加ログ。
  • 所感。
  • コンテスト中に何を考えたか。
  • コンテスト後に解説をみたり、少し整理したりしたくらいの内容。
  • 問題の詳細で細かく書こうと思うものは別記事とする。

結果

ABC完。ABは順調に終わって、Cも3で割ったあまりが0, 1, 2の場合分けまではわかってたのに、WAを連発してしまった・・・。Cで時間使いすぎたが、Dで挽回できそうと思ったが、2重の累積和を1度のforで書き上げられず終了。


どう考えたか + α

問題

A - twiblr

問題タイプ:数式 文意から可能な最大値から{\displaystyle b}を引けばいい。

a, b = map(int, input().split())
ans = (a * 2) + 100 - b
print(ans)

B - Almost GCD

問題タイプ:最大公約数の話と思いきや。。。

一瞬?っとなったが、{\displaystyle 2 \leq A_i \leq 1000}なので、{\displaystyle A_i}{\displaystyle 2}から{\displaystyle 1000}で順番に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しかないということ。

  • {\displaystyle n}を3で割った時の余りがいくつかで場合分けする。
    • さらにその後に各桁の数値が3の倍数かどうかで場合分けしてその数をカウントする。
    • この値によって答えをだし分ける。
  • 消せる桁数は{\displaystyle k}未満とすることを条件に入れるのを忘れずに。

別記事にする。


D - Wandering

問題タイプ:累積和

{\displaystyle i}番目までの累積和と{\displaystyle i}番目までの累積和の最大値を使って求める。

別記事にする。


おわりに

今回は、時間はかかってWA連発だがABC完答できたのはよかった。条件分岐は、厳しくみているつもりでも穴があって、今回はダメなパターンを見つけられて実装を直せたが0ベースで考えるのはやはり難しい。引き続き精進する。


参考になる書籍

けんちょんさんこと、大槻さんの書籍である、「問題解決力を鍛える!アルゴリズムとデータ構造」 ご本人の記事の中で難易度は、螺旋本ということで初学者でも非常に結構読みやすい!!!(実際に、けんちょんさんの記事はC++に疎い自分でも、その思考プロセスを学べるくらい丁寧に書かれているし、この書籍も非常に読みやすい)どのようなステータスの人にもおすすめの一冊になっている。

問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)

問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)

  • 作者:大槻 兼資
  • 発売日: 2020/10/02
  • メディア: 単行本(ソフトカバー)

書籍は読み終わったので、Pythonで章末問題をこなしていっている。

blacktanktop.hatenablog.com