問題概要
Saraは、「ふしぎなポケット」を手に入れた。
「ふしぎなポケット」は、いくつかビスケットを入れて叩くと、入れたビスケットの数が2倍になる。
Saraは最初1枚のビスケットを持っていて、「ふしぎなポケット」を使ってちょうど$N$枚のビスケットにして、全部食べたいと思っている。
(食べきれないので枚数をオーバーしてはいけない)
この時、ちょうど$N$枚にするには、Saraは最低何回ポケットを叩く必要があるか求めてください。
$N\leqq10^8$
解法
$2^k+a$のようにして、任意の数を作れるので、$N≦2^x$となるような最小の$x$を出力すれば良い。
計算量:$O(logN)$
ソース
#include <bits/stdc++.h> using namespace std; using VS = vector<string>; using LL = long long; LL N; LL ans = 0LL; int main() { cin.tie(0); ios_base::sync_with_stdio(false); cin >> N; int s = 1; while (N > s) { s *= 2; ans++; } cout << ans << "\n"; return 0; }