見出し画像

M-SOLUTIONS プロコンオープン 2020見直し B - Magic 2

B - Magic 2

問題

A,B,C,Kの数字が与えられる。任意の数字を2倍にする作業を繰り返して、K回以内「A<B<C」にすることができるか?という問題。

作成した解答(Python:26ms)

a, b, c = map(int, input().split())
k = int(input())
cnt = 0
while a >= b:
   b *= 2
   cnt += 1

while b >= c:
   c *= 2
   cnt += 1

print("Yes" if k >= cnt else "No")

BがAを超えるまで2倍し続けて、その後同様にCがBを超えるまで2倍し続けその繰り返し回数がK以下かどうか比較すると良い。解説も同様の解答方法でした。

解説を見て作成した解答(CPP:6ms)

#include <bits/stdc++.h>
using namespace std;

int main() {
   int a, b, c, k;
   cin >> a >> b >> c >> k;
   int cnt = 0;
   while (a >= b) {
       b *= 2;
       cnt++;
   }
   while (b >= c) {
       c *= 2;
       cnt++;
   }
   if (cnt <= k) cout << "Yes" << endl;
   else cout << "No" << endl;
}

Pythonとやってることは同じ、「if」やら「else」の周りに「{}」(カーリーブラケット)も「:」(コロン)も書かなくて良いってのは楽で良いですね

この記事が気に入ったらサポートをしてみませんか?