题解
2023-09-13 17:53:09
发布于:广东
16阅读
0回复
0点赞
思路很简单,从27开始往下遍历,如果小于的话,就把n减去,最后如果存在优秀的拆分,一定等于,否则不存在优秀的拆分。
为什么是27开始遍历?
因为输入数据的数据范围是 ,只要求出就可以求出上限,而Python刚好可以高效的解决这个问题:
import math
print(math.ceil(math.log2(1e7)))
AC代码如下:
#include <bits/stdc++.h>
using namespace std;
vector<int> ans; // 暂存答案
int main()
{
int n;
cin>>n;
for(int i=27;i>0;i--) // 为什么是27?
{
if(pow(2,i)<=n)
{
ans.push_back(pow(2,i));
n-=pow(2, i);
}
}
if(n>0) cout<<-1;
else for(int i=0;i<ans.size();i++) cout<<ans[i]<<' ';
}
这里空空如也
有帮助,赞一个