Atcoder349 - D 求条
评测记录:https://atcoder.jp/contests/abc349/submissions/52354715
AC: 31 WA:1
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<algorithm>
#include<map>
#define ll long long
using namespace std;
const int N=1e7+10;
ll l,r,len;
struct stu
{
ll L,R;
}ans[N];
void dfs(ll k,ll x){
ans[++len].L=x;
if(k*(x/k+1)==r){
ans[len].R=k*(x/k+1);
return;
}
else if(k*(x/k+1)<r){
ans[len].R=k*(x/k+1);
ll p=x/k+1,K=1;
while(p%2==0){
p/=2;
K*=2;
}
dfs(k*K,ans[len].R);
}
else if(k*(x/k+1)>r){
ll t=k;
while(t*(x/t+1)>r){
t/=2;
}
ans[len].R=t*(x/t+1);
if(ans[len].R==r){
return;
}
dfs(t,ans[len].R);
}
}
int main(){
cin>>l>>r;
if(l==0){
ll k=1,p=r;
while(p%2==0){
p/=2;
k*=2;
}
ans[1].L=0;ans[1].R=k;len=1;
if(k==r){
cout<<len<<'\n';
for(int i=1;i<=len;++i){
cout<<ans[i].L<<" "<<ans[i].R<<'\n';
}
return 0;
}
dfs(k,k);
}
else{
ll k=1,p=l;
while(p%2==0){
p/=2;
k*=2;
}
dfs(k,l);
}
cout<<len<<'\n';
for(int i=1;i<=len;++i){
cout<<ans[i].L<<" "<<ans[i].R<<'\n';
}
return 0;
}