Same Parity Summands (Codeforces 1352B)
Tags: Math, constructive algorithms

You are given two positive integers $$$n$$$ ($$$1 \le n \le 10^9$$$) and $$$k$$$ ($$$1 \le k \le 100$$$). Represent the number $$$n$$$ as the sum of $$$k$$$ positive integers of the same parity (have the same remainder when divided by $$$2$$$).In other words, find $$$a_1, a_2, \ldots, a_k$$$ such that all $$$a_i>0$$$, $$$n = a_1 + a_2 + \ldots + a_k$$$ and either all $$$a_i$$$ are even or all $$$a_i$$$ are odd at the same time.If such a representation does not exist, then report it.

Input: The first line contains an integer $$$t$$$ ($$$1 \le t \le 1000$$$) — the number of test cases in the input. Next, $$$t$$$ test cases are given, one per line.Each test case is two positive integers $$$n$$$ ($$$1 \le n \le 10^9$$$) and $$$k$$$ ($$$1 \le k \le 100$$$).

Output: For each test case print:  YES and the required values $$$a_i$$$, if the answer exists (if there are several answers, print any of them);  NO if the answer does not exist. The letters in the words YES and NO can be printed in any case.


Sample Inputs:
8
10 3
100 4
8 7
97 2
8 8
3 10
5 3
1000000000 9

Sample Outputs:
YES
4 2 4
YES
55 5 5 35
NO
NO
YES
1 1 1 1 1 1 1 1
NO
YES
3 1 1
YES
111111110 111111110 111111110 111111110 111111110 111111110 111111110 111111110 111111120

Solution (Python):
t = int(input())
for _ in range(t):
    (n, k) = [int(x) for x in input().split()]
    if n > k - 1 and n % 2 == k % 2:
        print('YES')
        print('1 ' * (k - 1) + str(n - (k - 1)))
    elif n > 2 * (k - 1) and n % 2 == 0:
        print('YES')
        print('2 ' * (k - 1) + str(n - 2 * (k - 1)))
    else:
        print('NO')

Solution (Python):
n = int(input())
for i in range(n):
    (a, b) = map(int, input().split())
    if (a - (b - 1)) % 2 == 1 and a - (b - 1) > 0:
        print('YES')
        print(a - (b - 1), '1 ' * (b - 1))
    elif (a - (b - 1) * 2) % 2 == 0 and a - (b - 1) * 2 > 0:
        print('YES')
        print(a - (b - 1) * 2, '2 ' * (b - 1))
    else:
        print('NO')

Solution (Python):
def ii():
    return int(input())

def mii():
    return map(int, input().split())

def lii():
    return list(map(int, input().split()))

def slii():
    return sorted(list(map(int, input().split())))

def mis():
    return map(str, input().split())

def lis():
    return list(input())

def slis():
    return sorted(list(map(str, input().split())))
for _ in range(ii()):
    (n, k) = mii()
    re = n - 2 * k
    rem = n - k
    if re >= 0 and re % 2 == 0:
        print('YES')
        arr = [2] * (k - 1)
        arr.append(re + 2)
        print(*arr)
    elif rem % 2 == 0 and rem >= 0:
        print('YES')
        arr = [1] * (k - 1)
        arr.append(rem + 1)
        print(*arr)
    else:
        print('NO')