列表

详情


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;
		}
	}
}

上一题