当前位置: 代码迷 >> 综合 >> CF1095C Powers Of Two
  详细解决方案

CF1095C Powers Of Two

热度:71   发布时间:2023-12-06 07:39:47.0

题目:CF1095C Powers Of Two

思路:
如果不考虑输出结果,可以考虑把n分成尽量大的数。
如果考虑输出结果,且分得得数数量不够,就把一些大于1的数分成两个就好了。

代码:

#include<bits/stdc++.h>
using namespace std;#define read(x) scanf("%d",&x)int n,k;
vector<int> ans;int main() {
    read(n),read(k);if(k>n) {
    printf("NO");return 0;}for(int i=30;i>=0;i--) {
    while(n>=(1<<i)) n-=(1<<i),ans.push_back(1<<i);}if((int)ans.size()>k) printf("NO");else {
    int t=0;while(k>ans.size()) {
    while(ans[t]<=1) t++;ans[t]/=2;ans.push_back(ans[t]);}printf("YES\n");for(int i=0;i<ans.size();i++) printf("%d ",ans[i]);}return 0;
}