mini notes

競技プログラミングの解法メモを残していきます。

AtCoder蟻本 初級編 2-2 貪欲法 ④Saruman's Army

ARC088 C - Multiple Gift (300)

C - Multiple Gift

概要

整数X, Yが与えられたとき、下記の条件を満たす数列Aの長さの最大値を求めよ。

  •  X \leq A_{i} \leq Y
  •  A_{i} | A_{i+1}かつ A_{i} < A_{i+1}
制約

 1 \leq X \leq Y \leq 10^{18}

方針

A_{1} = X, A_{i+1} = 2 \times A_{i+1}として数列を構築する。

解答

Submission #3887743 - AtCoder Beginner Contest 083

#include <bits/stdc++.h>
 
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define rep(i,n) FOR(i,0,n)
#define RFOR(i,a,b) for(int i=(a)-1;i>=(b);i--)
#define rrep(i,n) RFOR(i,n,0)
 
using namespace std;
 
typedef long long ll;
typedef unsigned long long ull;
 
int main()
{
	cin.tie(0);
	ios::sync_with_stdio(false);
 
	ll x, y;
	cin >> x >> y;
 
	ll ans = 1;
	while(x <= y){
		x *= 2;
		ans++;
	}
	ans--;
 
	cout << ans << endl;
}