美文网首页
Codeforces 1352B - Same Parity S

Codeforces 1352B - Same Parity S

作者: 费城的二鹏 | 来源:发表于2020-05-13 17:03 被阅读0次

夕阳一线天。

翻译

给你两个正整数 n 和 k。n 是 k 个正整数的和,并且要求 k 个整数同是奇数或者偶数。

输入格式

第一行,输入整数 t,表示测试用例组数。

每行测试用例输入两个整数,n 和 k 用空格分隔。

输出格式

如果可以构造出答案,则第一行输出 YES,第二行输出答案,并且用空格分隔。

如果不能构造出答案,则输出 NO。

如果有多个答案,输出任意一种。

分析

如果 k - 1 个 1 和一个奇数可以组成 n,则就用这种方式构造答案,如果不行,则用 k - 1 个 2 和一个偶数组成答案,如果依旧不行,则输出 NO。

代码逻辑有些不同,先判断应该用 1 还是 2,如果 (n - k + 1) 是偶数则必须用 2,否则可以用1。然后,判断n是奇数,k是偶数的情况,则不能构造出答案。最后,判断剩余数字能否填充,如果已经大于了 n,则不能构造。

好像说的有些细碎。

代码(PyPy3)

# https://codeforces.com/problemset/problem/1352/B

import sys

# sys.stdin = open(r"./file/input.txt", 'r')
# sys.stdout = open(r"./file/output.txt", 'w')

t = int(input())

for _ in range(t):
    arr = input().split(" ")
    n = int(arr[0])
    k = int(arr[1])

    digit = 1 if (n - k + 1) % 2 == 1 else 2

    if n % 2 == 1 and k % 2 == 0:
        print("NO")
    elif n < k * digit:
        print("NO")
    else:
        print("YES")
        result = [digit] * (k - 1)
        result.append(n - (k - 1) * digit)
        print(" ".join(str(i) for i in result)) 
    

更多代码尽在 https://github.com/Tconan99/Codeforces

by 费城的二鹏 2020.05.11 长春

相关文章

网友评论

      本文标题:Codeforces 1352B - Same Parity S

      本文链接:https://www.haomeiwen.com/subject/ncbpnhtx.html