刚入门OI萌新求条
  • 板块学术版
  • 楼主fedoralxy
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/14 09:57
  • 上次更新2024/4/14 11:35:51
查看原帖
刚入门OI萌新求条
491542
fedoralxy楼主2024/4/14 09:57

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;
}
2024/4/14 09:57
加载中...