专栏文章
题解:P7071 [CSP-J2020] 优秀的拆分
P7071题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqnz6zu
- 此快照首次捕获于
- 2025/12/04 07:54 3 个月前
- 此快照最后确认于
- 2025/12/04 07:54 3 个月前
以下是思路 :
- 首先呢,我们先处理无解的情况。因为2的正整数次方无论如何都是偶数。所以n只要是奇数,就输出-1。
- 其次,我们去处理可行的情况,我们可以举几个例子:
例一:12
12以下的2的正整数次幂有 : 2 , 4 , 8
那么,12=4+8,输出:8 4
例二:18
12以下的2的正整数次幂有 : 2 , 4 , 8 , 16
那么,18=16+2(不是8+8是因为题目要求不同)
综上所述:输出的时候,就从大往小计算和输出,可以满足题目要求。 - 现在呢,我们的两种情况都处理完了。
- 剩下的一些要点就随注释在代码里了。
AC code :
CPP#include<bits/stdc++.h>//万能头文件
using namespace std;
int n;
long long a[30];//以防万一开ll
int main(){
cin>>n;
if(n%2==1){
cout<<"-1";
return 0;
}
a[1]=1;//初定义a[1]=2^1
for(int i=2;i<=26;i++){
a[i]=a[i-1]*2;//每次乘2
}
for(int i=26;i>=2;i--){//从大往小输出
if(n>=a[i]){//能输出就输出
n-=a[i];
cout<<a[i]<<' ';
}
if(n==0)return 0;//一个小优化
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...