题目链接: https://codeforces.com/problemset/problem/1352/B
解题思路: 模拟,题目要求只能用k个奇数或者偶数组成和为n的序列。因此对两种情况分别模拟即可。
一: 前k-1个数全用1填充,若n-(k-1)也为奇数(注意n-(k-1)<0的情况),则说明此种情况全用奇数填充可行。输出序列即可。
二: 前k-1个数全用2填充,若n-2*(k-1)也为偶数(注意n-2*(k-1)<0的情况),则说明此种情况全用偶数填充可行。输出序列即可。
三: 若前两种情况都不符合,则说明无法实现题目要求,输出NO即可。
#include<iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int n, k;
cin >> n >> k;
if (n - k + 1 > 0 && (n - k + 1) % 2 != 0)
{
cout << "YES" << endl;
for (int i = 0; i < k - 1; i++)
cout << 1 << ' ';
cout << n - k + 1 << endl;
}
else if (n - 2 * (k - 1) > 0 && (n - 2 * (k - 1)) % 2 == 0)
{
cout << "YES" << endl;
for (int i = 0; i < k - 1; i++)
cout << 2 << ' ';
cout << n - 2 * (k - 1) << endl;
}
else
cout << "NO" << endl;
}
return 0;
}