求调
查看原帖
求调
1247045
Dx__楼主2024/8/27 19:27
#include<bits/stdc++.h>
#define int long long
using namespace std;
int l,r;
int dp[31];
int b[31],cnt;
int ds(int x,int y)
{
	int res=x;
	for(int i=1;i<=y-1;i++)
	{
		res=res*(x-i)/(i+1);
	}
	if(y==0) return 1;
	return res;
}//ÔÚxÖÐÑ¡y¸ö

int d(int x,int y)
{
	int res=0;
	for(int i=y;i<=x;i++)
	{
		res+=ds(x,i);
	}
	return res;
}//ÔÚxÖÐÑ¡´óÓÚµÈÓÚy¸ö;


int solve(int x)
{
	if(x==0) return 0;
	memset(b,0,sizeof(b));
	cnt=0;
	while(x)
	{
		b[++cnt]=x%2;
		x/=2;
	}
	int ans=0;
	int cnt2=0;
	for(int i=3;i<=cnt;i++)
		ans+=d(i-2,i/2);
	for(int i=cnt-1;i>=1;i--)
	{
		if(b[i]==0)
		{
			cnt2++;
			continue;
		}
		ans+=d(i-1,(1+cnt)/2-cnt2-1);
	}
//	if(cnt2>=(1+cnt)/2) ans++;
	return ans;
}

signed main ()
{
	cin >> l >> r;
	cout << solve(r)-solve(l-1);
}

70求调
记录

2024/8/27 19:27
加载中...