WA #9 ,输出少1,求调Qwq
查看原帖
WA #9 ,输出少1,求调Qwq
989997
DGL__DGL_AFO楼主2024/9/28 07:50

输入数据:

1 3538953

正确输出:

1760693

我的输出:

1760692

#include<bits/stdc++.h>
using namespace std; 
typedef long long ll;
ll l,r;
ll f[154];
ll c[154][154];
ll op[154],gen[154];
ll res,len;
ll w[154],t[154];

inline void init()
{
	c[0][1]=1;c[1][1]=1;
	for(int i=2;i<=94;i++)
	{
		c[0][i]=1;
		for(int j=1;j<=i;j++)
		  c[j][i]=c[j-1][i-1]+c[j][i-1];
	}
	
	for(int i=1;i<=94;i++)
	  for(int j=i;j>=(i+1)/2;j--)
	    op[i]+=c[j][i];
	
	for(int i=1;i<=94;i++)
	{
		for(int j=i-1;j>=(i+1)/2;j--)
		  gen[i]+=c[j][i-1]; 
		gen[i]+=gen[i-1];  
	}
	     
	//cout<<gen[3];
}

inline ll S(ll x)
{
	if(x==0)
	  return 0;
	len=0;
	ll a=x;
	ll ans=0;
	res=0;
	//cout<<a<<' ';
	while(a)
	{
		//cout<<a<<' ';
		len++;
		if(a&1)
		  w[len]=1;
		else
		  w[len]=0;  
		a/=2;  
	}
	ans+=gen[len-1];
	//res++;
	for(int i=1;i<=len;i++)
	{
		t[i]=w[len-i+1];
		//cout<<t[i]<<' ';
	}
	 /* cout<<'\n';
	  cout<<len<<' ';
	  cout<<ans<<'\n';*/
	for(int i=2;i<=len;i++)  
  {
  	if(t[i])
  	{
  		for(int j=len-i;j>=max(0ll,(len+1)/2-res-1);j--)
  		  ans+=c[j][len-i];
  		//cout<<i<<' '<<len-i<<' '<<res<<' '<<ans<<'\n';  
		}
		else
			res++;
	}
	///cout<<res<<' '<<(len+1)/2<<'\n';
	if(res>=(len+1)/2)
	  ans++;
	
	return ans;
}

int main()
{
	init();
	cin>>l>>r;
	
	cout<<S(r)-S(l-1);
	
	return 0;
}
2024/9/28 07:50
加载中...