洛谷2431 正妹吃月饼

题目:http://www.luogu.org/problem/show?pid=2431
分析:a是保底解,那么就暴力枚举能否加上一个使得a+(1<< i)<=b
代码:

#include 
#include 
using namespace std;
const long long int ONE=1;
const int Tmax=70;
long long int x,y,tmpx;
int a[Tmax],lena=-1,ans;
void init()
{
    tmpx=x;
    while(tmpx>0)
    {
        a[++lena]=tmpx&1;
        tmpx>>=1;
    }
    return;
}
void work()
{
    int i;
    for(i=0;i<=62;i++)
    {
        if(a[i]==1) ans++;
        else {
            x+=(ONE<<(i));
            if(y>=x) ans++;
        }
    }
    printf("%d",ans);
    return;
}
int main()
{
    scanf("%lld%lld",&x,&y);
    if(x>y) 
    {
        printf("0");
        return 0;
    }
    init();
    work();
    return 0;
}

你可能感兴趣的:(模拟)