T1 优秀的拆分
这一道题就是一道签到题
这道题我们可以很快速的发现,若n为奇数(即n%2==1),则n必定无法拆分;若n为偶数,其实就只需要有以下操作:
1.先通过计算2的k次幂,找到第一个满足大于等于n的值
2.计算当n-k>=0时,输出k,随后将k = k/2 最后当n等于0,则输出即为其优秀拆分
还可以直接把2的次幂打出来,再枚举
代码
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int M=1e5+5;
int a[105]={
0,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608};
int main(){
int n;
scanf("%d",&n);
if(n%2==1){
printf("-1");</