当前位置: 首页 > 工具软件 > online-judge > 使用案例 >

online_judge_1113

鄢雅畅
2023-12-01
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int m,n;
    int ans,t,i,r;
    while(cin>>m>>n)
    {
        if(n==0 && m==0)
            break;
        ans = 0;
        t = m;
        r = m;
        i=0;
        while(t <= n)
        {
            i++;
            t *= 2;
            r = 2*r + 1;
        }
        t /= 2;
        r /= 2;
        ans = pow(2, i-1) - 1;
        if(r < n)
            n = r;
        for(i=t; i<=n; ++i)
            ans++;
        cout<<ans<<endl;
    }
    return 0;
}

 

北大的题目就是有意思,不特意考察编程能力。反倒是数学推理能力。也许这是最重要的吧!

下面的代码很漂亮,可以超时……

//此方法超时
#include <iostream>

using namespace std;

void countTree(int m, int n,int &ans)
{
    if(m<=n)
    {
        ans++;
        countTree(2*m, n, ans);
        countTree(2*m+1, n, ans);
    }
}

int main()
{
    int m,n;
    int ans;
    while(cin>>m>>n)
    {
        if(n==0 && m==0)
            break;
        ans = 0;
        countTree(m, n, ans);
        cout<<ans<<endl;
    }
    return 0;
}



 类似资料:

相关阅读

相关文章

相关问答