NC219183. 简简单单思维题
描述
给出两个正整数n(1≤n≤1e9)和k(1≤k≤100)。将数字n表示为具有相同奇偶性的k个正整数之和(除以2时具有相同的余数)。
换句话说,求a1,a2,…,ak,使得所有ai>0,n=a1+a2+…+ak,并且所有ai同时为偶数或奇数。
如果不存在这样的表示,则输出NO。
输入描述
第一行包含整数t(1≤t≤1000)即输入中的测试用例数。接下来,给出t个测试用例,每行一个。
每个测试用例是两个正整数n(1≤n≤1e9)和k(1≤k≤100)。
输出描述
对于每个测试用例:如果答案存在,输出“YES”和构造好的序列。如果答案不存在,输出”NO"。
示例1
输入:
8 10 3 100 4 8 7 97 2 8 8 3 10 5 3 1000000000 9
输出:
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
C++(clang++11) 解法, 执行用时: 7ms, 内存消耗: 392K, 提交时间: 2021-03-13 13:50:25
#include<bits/stdc++.h> using namespace std; int t; int n,k; int main(){ cin>>t; while(t--){ cin>>n>>k; if((n-k+1)%2==1&&(n-k+1)>0){ cout<<"YES"<<endl;; for(int i=0;i<k-1;i++){ cout<<"1 "; } cout<<n-k+1<<endl; } else if((n-2*k+2)%2==0&&(n-2*k+2)>0){ cout<<"YES"<<endl; for(int i=0;i<k-1;i++){ cout<<"2 "; } cout<<n-2*k+2<<endl; } else{ cout<<"NO"<<endl; } } }