感觉自己真的是弱爆了,红题都成问题......
我用二分查找做这个拆分,为什么在输入极限数据 1e7 的时候输出这样一个诡异的情况:
524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 524288 32768 4096 1024 512 128
我想既然要死循环就会一直输出 524288,但是为什么它输出了一半突然就又变回了正确答案,十分不理解。 有没有大佬可以解释一下为什么会这样或者这份代码的问题在哪里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;
}