くろたんく雑記帳

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

MENU

Python3で解く AtCoder Beginner Contest 180 D - Takahashi Unevolvedff

条件を検討すると、{\displaystyle x \times a}増えるか{\displaystyle b}増えるかで小さい方を選びたいってことに気付ければなんとかなる。

目次

概要

問題

  1. 初期の強さは{\displaystyle x}、経験値は{\displaystyle 0}
  2. カコモンジムに通う:強さが{\displaystyle a}倍になり、経験値は{\displaystyle 1}増える。
  3. AtCoderジムに通う:強さが{\displaystyle b}増え、経験値は{\displaystyle 1}増える。
  4. 経験値は{\displaystyle y}を超えないように特訓した場合、最大の経験値は?

解くときに考えた内容

条件的に、{\displaystyle x \times a}増えるか{\displaystyle b}増えるかで小さい方を選びたい。なので、以下の手順になる。

  • {\displaystyle x \times a}{\displaystyle b}よりも小さいかつ{\displaystyle x \times a}{\displaystyle y}よりも小さいなら、カコモンジムに通う。
  • 残りの経験値は{\displaystyle y} から初期の経験値とカコモンジムに通って得た経験値を引いた値。
  • それを超えないようにAtCoderジムに通う。
  • ここは割り算処理するのでぴったりの処理だけ気をつける。
  • 今回は残りの経験値から{\displaystyle 1}引いたものを{\displaystyle b}で割った整数部分をAtCoderジムに通った数とした。

コード

x, y, a, b = map(int, input().split())
a_cnt = 0
while (x*a) < b and (x*a) < y: 
    x *= a
    a_cnt += 1
b_cnt = (y-x-1) // b
ans = a_cnt + b_cnt
print(ans)

参考になる書籍

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

とうとう発売され自分の手元にも来た(2020-10-03)。現在読み中なのである程度読み込んだら感想を書く予定。めっちゃ図が多いし、章末問題もあるしかなりイケてる。答えはC++で書かれているがそのうちPythonでも書かれるとのことなので、自分で前もってやってしまおうと思う(答え合わせできるのはありがたい)。

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

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

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

章末問題を解いてる。まだ途中。 blacktanktop.hatenablog.com