Codeforces Round #647 (Div. 2) -A

Codeforces Round #647 (Div. 2) -A

Codeforces Round #647 (Div. 2) -A_第1张图片
1、首先判断两数中值的大数能否被值的小数整除。
2、判断两数的倍数关系是否满足2的n次方。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define sc(a) scanf("%lld",&a)
#define scc(a,b) scanf("%lld%lld",&a,&b)
#define sccc(a,b,c) scanf("%lld%lld%lld",&a,&b,&c)
#define scccc(a,b,c,d) scanf("%lld%lld%lld%lld",&a,&b,&c,&d)
#define sccccc(a,b,c,d,e) scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&e)
#define INF 0x3f3f3f3f3f3f3f3f
#define inf 0x3f3f3f3f
#define mod 11092019
#define ff(a,b,c) for(int a=b;i<=c;i++)
typedef long long ll;
void gg()
{
    ll a,b,c,d;
    cin>>a>>b;
    c=max(a,b);
    d=min(a,b);
    if(c%d!=0) {cout<<"-1"<<endl;return ;}
    ll k=c/d,t=0;
    while(k!=1)
    {
        if(k%2==1)
        {
            cout<<"-1"<<endl; return;
        }
        t++;
        k/=2;
    }
    cout<<t/3+(t-t/3*3)/2+(t-t/3*3-(t-t/3*3)/2*2)<<endl;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
        gg();
}

你可能感兴趣的:(cf)