红题求调......
查看原帖
红题求调......
777131
IDNo1楼主2023/10/6 20:28

感觉自己真的是弱爆了,红题都成问题......

我用二分查找做这个拆分,为什么在输入极限数据 1e71e7 的时候输出这样一个诡异的情况:

524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 32768 4096 1024 512 128

我想既然要死循环就会一直输出 524288524288,但是为什么它输出了一半突然就又变回了正确答案,十分不理解。 有没有大佬可以解释一下为什么会这样或者这份代码的问题在哪里qaq

#include<bits/stdc++.h>
#define re register int
using namespace std;
int n,a[25]={0,2,4,8,16,32,
64,128,256,512,1024,
2048,4096,8192,16384,32768,
65536,131072,262144,524288},pos;//19个数
bool b,vis[25];
int main()
{
	cin>>n;
	if(n%2!=0)
	{
		cout<<-1;
	}
	else
	{
		int l,r,mid;
		//cout<<n;
		while(n)
		{
			l=1;r=19;
			//cout<<endl<<endl<<endl;
			while(l<r)
			{
				mid=(l+r)/2+1;
				if(a[mid]<=n)l=mid;
				else r=mid-1;
				//cout<<l<<" "<<mid<<" "<<r<<endl;
			}
			if(a[l]<=n)
			{
				cout<<a[l]<<" ";
				n-=a[l];
				//cout<<n;
			}
		}
	}
	return 0; 
} 
2023/10/6 20:28
加载中...