1 条题解
-
0
#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
- 上传者