Good Bye 2015 B. New Year and Old Property

Posted Dysania_l

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Good Bye 2015 B. New Year and Old Property相关的知识,希望对你有一定的参考价值。

题目链接:http://codeforces.com/problemset/problem/611/B

解题思路:

直接暴力推出所有符合条件的。

由进制转换可以知道,二进制只有1个0也就是十进制减去前面任意一个2的次方

然后脑残一样的用了位运算,死都无法表示64位,只能32位,还以为电脑出问题了。。换了pow秒过。。。

实现代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
    ll m,n,i,j,a[100],b[10000],na,nb,c=0,num;
    a[0] = 1;
    for(i=1;i<63;i++){
        a[i] = pow(2,i);
            a[i]+=a[i-1];
        //cout<<a[i]<<endl;
    }
    b[0] = a[0];
    cin>>m>>n;
    for(i=1;i<63;i++){
        for(j=i-1;j>=0;j--){
            num = pow(2,j);
            b[c++] = a[i] - num;
            //cout<<b[c-1]<<endl;
            }
            if(b[c-1]>=n){
                break;
            }
        }
    if(m!=n){
    for(i=0;i<c;i++){
        if(b[i]>=m){
                na=i;
            break;
        }
    }
    for(i=0;i<c;i++){
        if(b[i]>n){
            nb = i;break;
        }
    }
    cout<<nb-na<<endl;
    }
    else{
        int flag = 0;
        for(i=0;i<c;i++){
            if(b[i]==m)
                flag=1;
                //cout<<b[i]<<endl;
        }
        if(flag == 1)
            cout<<"1"<<endl;
        else
            cout<<"0"<<endl;
    }
    return 0;
}

 

以上是关于Good Bye 2015 B. New Year and Old Property的主要内容,如果未能解决你的问题,请参考以下文章

Good Bye 2015 F - New Year and Cleaning

Good Bye 2016 C. New Year and Rating

Codeforces Good Bye 2017 C. New Year and Curling 几何枚举

Good Bye 2014 E - New Year Domino 单调栈+倍增

Good Bye 2018 A. New Year and the Christmas Ornament

Codeforces Good Bye 2016 E. New Year and Old Subsequence