以下考虑 n ≥ k: 若 n 为偶数,且 n ≥ 2k,则一定可以,因为可以用 (k - 1) 个 2 表示,最后一个数一定是偶数;若 k ≤ n < 2k,则可以先用 (k - 1) 个 1 表示,剩下最后一个数若为奇数,则可以,若为偶数则不行。 若 n 为奇数:若 k 为偶数,则一定不行;若 k 为奇数,用 (k - 1) 个 1 表示,剩下最后一个数一定也是奇数。
源代码
#include<iostream> usingnamespacestd;
intmain(){ int t; cin >> t; while (t--) { int n, k; cin >> n >> k; if (n % 2 == 0 && n >= 2 * k) { int x1 = 2 * (k - 1); int x2 = n - x1; cout << "YES" << endl; cout << x2; for (int i = 0; i < k - 1; i++) cout << " 2"; cout << endl; } elseif (n % 2 == 0 && n >= k && n < 2 * k) { int x1 = n - (k - 1); if (x1 % 2 == 0) cout << "NO" << endl; else { cout << "YES" << endl; cout << x1; for (int i = 0; i < k - 1; i++) cout << " 1"; cout << endl; } } elseif (n % 2 == 1 && n >= k) { if (k % 2 == 1) { int x1 = n - (k - 1); cout << "YES" << endl; cout << x1; for (int i = 0; i < k - 1; i++) cout << " 1"; cout << endl; } else cout << "NO" << endl; } else cout << "NO" << endl; }