rt,今天 ATD 题本地的样例测出来没有问题,但是交上去之后会有两个样例点 WA。求大佬神犇为蒟蒻解释一下为什么?
#include<bits/stdc++.h>
using namespace std;
long long l,r,ans,ansl[1000010],ansr[1000010],now=1,sum,num,numl[1000010],flag;
int main(){
cin>>l>>r;
if(l!=0){
while(now<=l)now*=2,sum++;
while(l!=now){
ansl[++ans]=l;
num=flag=0;
while(l){
numl[++num]=l%2;
l/=2;
}
for(long long i=1;i<=num+1;i++){
if(flag==1&&numl[i]==0){
numl[i]=1;
break;
}
if(numl[i]==1)flag=1;
numl[i]=0;
}
for(long long i=1,j=1;i<=num+1;i++,j*=2){
l+=j*numl[i];
}
ansr[ans]=l;
}
while(now*2<=r)ansl[++ans]=now,ansr[ans]=now*=2,sum++;
}
else{
ansl[++ans]=l;
while(now<r)now*=2,sum++;
ansr[ans]=now;
}
for(long long i=sum,j=now;i>=0;i--,j/=2){
while((ansr[ans]/(ansr[ans]/j))*(ansr[ans]/j+1)<=r){
ansl[++ans]=ansr[ans-1];
ansr[ans]=(ansr[ans-1]/(ansr[ans-1]/j))*(ansr[ans-1]/j+1);
}
}
cout<<ans<<endl;
for(int i=1;i<=ans;i++)cout<<ansl[i]<<" "<<ansr[i]<<endl;
return 0;
}