1 条题解

  • 0
    @ 2023-8-30 20:08:30
    #include<bits/stdc++.h>
    using namespace std;
    inline int read()
    {
        char ch='*';
        int f=1;
        while(!isdigit(ch=getchar())) if(ch=='-') f=-1;
        int num=ch-'0';
        while(isdigit(ch=getchar())) num=num*10+ch-'0';
        return num*f;
    }
    int f[40][40];
    int solve(int x)
    {
        if(!x) return 0;
        int s[40],m=0,ans=0,sum=1;
        memset(s,0,sizeof(s));
        while(x){
            s[++m]=x&1;
            x>>=1;
        }
        for(int i=2;i<m;i++)
            for(int j=0;j<i/2;j++)
                ans+=f[i-1][j];
        for(int i=m-1;i;i--)
        {
            if(s[i])
            {
                for(int j=0;j<=m/2-sum;j++)
                    ans+=f[i-1][j];
            }
            sum+=s[i];
        }
        ans+=sum<=(m/2);
        return ans;
    }
    int main()
    {
        f[0][0]=1;
        for(int i=1;i<=30;i++)
        for(int j=f[i][0]=1;j<=i;j++)
            f[i][j]=f[i-1][j-1]+f[i-1][j];
        int a,b;
        a=read();b=read();
        cout<<solve(b)-solve(a-1)<<endl;
        return 0;
    }
    
    • 1

    信息

    ID
    1662
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    3
    已通过
    3
    上传者