Why?
  • 板块学术版
  • 楼主xxgirlxx
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/13 21:42
  • 上次更新2024/4/13 21:47:21
查看原帖
Why?
1059074
xxgirlxx楼主2024/4/13 21:42

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;
}
2024/4/13 21:42
加载中...