暴力枚举1和0 的个数,可太水了,,,
之前写了一发wa。wa在我武断的以为1的个数一定要大于0,还有重复计算了0的个数为1的情况。
还有我的写法要特判一下X=0的时候
#include <iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<string>
#include<cmath>
using namespace std;
long long getAB(int x,int y,int len)
{
string s;
s.clear();
if(x+y==0)
return 0;
int n=len/(x+y);
for(int i=1; i<=n; i++)
{
for(int j=1; j<=x; j++)
{
s+='1';
}
for(int j=1; j<=y; j++)
{
s+='0';
}
}
long long res=0;
//cout<<s<<endl;
for(int i=0; i<s.size(); i++)
{
res=res*2+(s[i]-'0');
}
return res;
}
long long getABA(int x,int y,int len)
{
string s;
s.clear();
int n=(len-x)/(x+y);
if(x+y==0)
return 0;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=x; j++)
{
s+='1';
}
for(int j=1; j<=y; j++)
{
s+='0';
}
}
for(int i=1; i<=x; i++)
s+='1';
long long res=0;
// cout<<s<<endl;
for(int i=0; i<s.size(); i++)
{
res=res*2+(s[i]-'0');
}
return res;
}
int main()
{
// cout<<getABA(1,1,3);
long long X,Y;
cin>>X>>Y;
int lenx=0;
int leny=0;
long long xx=X,yy=Y;
while(xx>0)
{
lenx++;
xx>>=1;
}
while(yy>0)
{
leny++;
yy>>=1;
}
long long ans=0;
for(int l=lenx+1; l<leny; l++)
{
for(int i=1; i<=l; i++)
{
for(int j=1; j<l; j++)
{
if(l%(i+j)==0)
{
// cout<<l<<" -"<<i<<" "<<j<<" ="<<getAB(i,j,l)<<endl;
ans++;
}
else if((l-i)!=0&&(l-i)%(i+j)==0)
{
// cout<<l<<" ! "<<i<<" "<<j<<" ="<<getABA(i,j,l)<<endl;
ans++;
}
}
}
ans++;//quanwei1
}
// cout<<ans<<endl;
if(lenx!=0)
{
xx=getAB(lenx,0,lenx);
if(xx>=X&&xx<=Y)
ans++;
for(int i=1; i<=lenx; i++)
{
for(int j=1; j<lenx; j++)
{
if(lenx%(i+j)==0)
{
long long x=getAB(i,j,lenx);
if(x>=X&&x<=Y)
ans++;
}
else if((lenx-i)!=0&&(lenx-i)%(i+j)==0)
{
long long x=getABA(i,j,lenx);
if(x>=X&&x<=Y)
ans++;
}
}
}
}
if(leny!=lenx)
{
xx=getAB(leny,0,leny);
if(xx>=X&&xx<=Y)
ans++;
for(int i=1; i<=leny; i++)
{
for(int j=1; j<leny; j++)
{
if(leny%(i+j)==0)
{
long long x=getAB(i,j,leny);
if(x>=X&&x<=Y)
ans++;
}
else if((leny-i)!=0&&(leny-i)%(i+j)==0)
{
long long x=getABA(i,j,leny);
if(x>=X&&x<=Y)
ans++;
}
}
}
}
cout<<ans<<endl;
return 0;
}
这次组队赛我背锅,我突然之间心态崩了,在那里看了很久的另一个水题(题目读错了,所以想难了),也不去看题,也不查队友的代码,也不重写队友的代码,导致自己队伍两个水题都没有写出来。
两三个小时的时间,现在想想我当时真的傻逼,就应该把那道题扔了,这种时候应该三个人先做出一道题来再说,而不是交给队友不去管她们,她们在那写崩了,写wa了,我都不管。
是我的错,,, 我心态有问题。好好检讨。