75分求助!!!

P7071 [CSP-J2020] 优秀的拆分

当n为2的正整数次幂时的处理不当。 hack: ```cpp input:1024 ans:1024 your ans:512 256 128 64 32 16 8 4 2 1 ``` 应把 ```cpp while(n>sum) ``` 改为 ```cpp while(n>=sum) ``` 保证n==sum时能够正确处理。
by Vector_ @ 2020-11-17 21:57:11


也可以用递归来做,边界设为$n≤1$,用for找到最小大于$n$的2的$x$次方,用$n$减去2的$x-1$次方,拿数组存$x-1$,再递归$n$就可以了。 ```cpp void split(ll n){ if(n<=1)return ; ll nmax=1; for(ll i=1;i<=31;i++){ if(ll(1<<i)>n){ nmax=i-1; break; } } n-=ll(1<<nmax); plan[ind++]=nmax; split(n); } ```
by xtracer @ 2020-11-17 22:06:26


@[cy陈旸](/user/216123) [提交记录](https://www.luogu.com.cn/record/41853776)以及[完整代码](https://www.luogu.com.cn/paste/vmfyle9m)
by xtracer @ 2020-11-17 22:09:57


@[Vector_](/user/126763) **谢谢大佬!AC了**
by cyS_E_F @ 2020-11-17 22:46:21


@[xtracer](/user/341049) **谢谢,懂了**
by cyS_E_F @ 2020-11-17 22:46:57


@[cy陈旸](/user/216123) 不用谢
by xtracer @ 2020-11-18 21:59:12


|