codeforces 1352B题解
此题给你 n n n和 k k k,让你构造一个 k k k个数的数组,他们需要具有相同的奇偶性,并且和为 n n n
根据题意,我们可以让前 k − 1 k-1 k−1个数相同,最后一个数为 n − ( k − 1 ) ∗ b n-(k-1)*b n−(k−1)∗b即可,此时, b b b只需取 1 1 1和 2 2 2就行,因为当 b b b取 3 3 3时,第 k k k个数与 b b b等于 1 1 1时第 k k k个数相差 2 ∗ ( k − 1 ) 2*(k-1) 2∗(k−1),因此奇偶性相同。
所以判断时
当
b
=
1
,
n
−
(
k
−
1
)
b=1,n-(k-1)%2=1
b=1,n−(k−1)时输出
Y
E
S
YES
YES,然后输出数组
当
b
=
2
,
n
−
2
∗
(
k
−
1
)
b=2,n-2*(k-1)%2=0
b=2,n−2∗(k−1)时输出
Y
E
S
YES
YES,然后输出数组
其他不满足的情况都输出
N
O
NO
NO
#include<bits/stdc++.h>
using namespace std;
void solve(){
int n,k;
cin>>n>>k;
if((n-(k-1))%2==1&&n-k+1>0){ //当b=1,n-(k-1)%2=1时
puts("YES");
for(int i=1;i<k;i++){
cout<<1<<' ';
}
cout<<n-k+1<<endl;
return;
}
else if((n-2*(k-1))%2==0&&n-2*(k-1)>0){ //当b=2,n-2*(k-1)%2=0时
puts("YES");
for(int i=1;i<k;i++){
cout<<2<<' ';
}
cout<<n-2*(k-1)<<endl;
return;
}
puts("NO");
return;
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}