[codeforces]4.24
  mSl9CMnxZDaQ 2023年11月02日 127 0

题目

https://codeforces.com/problemset/problem/1095/C

输入 n(1≤n≤1e9) k(1≤k≤2e5)。

把 n 分解为 k 个正整数,要求这些数都是 pow(2,i),即 1,2,4,8,……

如果无法做到,输出 NO,否则输出 YES 和这 k 个数。

输入
9 4
输出
YES
1 2 2 4

输入
8 1
输出
YES
8

输入
5 1
输出
NO

输入
3 7
输出
NO

Solution

难点在于如何输出这些数。一个方法是抓住一个数,除以2,然后append一个同样的数。另一个方法是创建k个1的数组然后将剩下的数直接分配过去。

def count_bit(n):
    ans = 0
    while n:
        if n&1: ans += 1
        n >>= 1
    return ans
n, k = list(map(int, input().split()))
b = count_bit(n)
if k < b or k > n:
    print('NO')
else:
    print('YES')
    ans = [1] * k
    diff = n - k
    for i in range(k):
        while ans[i] <= diff:
            diff -= ans[i]
            ans[i] <<= 1
    print(" ".join(map(str, ans)))
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  zLxnEsMLk4BL   2023年11月19日   29   0   0 数组字符串数组名
  gBkHYLY8jvYd   2023年11月19日   23   0   0 #include数组ci
  X5zJxoD00Cah   2023年11月19日   18   0   0 数组单引号字符串
  gBkHYLY8jvYd   2023年12月10日   22   0   0 #include数组i++
mSl9CMnxZDaQ