B. Same Parity Summands ( 1200

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
ll n,m,t;
int main() {
    cin>>t;
    while(t--){
        cin>>n>>m;
        //偶数个偶数相加,一定是偶数
        //奇数个偶数相加,一定是偶数
        //偶数个奇数相加,一定是偶数
        //奇数个奇数相加,一定是奇数
        if(m>n){
            cout << "NO" << endl;
            continue;
        }
        if(n % 2 == 1){
            if(m % 2 == 0){
                cout<<"NO"<<endl;
                continue;
            }else{
                cout<<"YES"<<endl;
                for(int i=1;i<=m-1;i++){
                    cout<<1<<" ";
                }
                cout<<n-m+1<<endl;
            }
        }
        if(n % 2 == 0){
            if(m % 2 == 1){
                if(n < 2*m){
                    cout<<"NO"<<endl;
                    continue;
                }
                cout<<"YES"<<endl;
                for(int i=1;i<=m-1;i++) cout<<2<<" ";
                cout<<n-2*(m-1)<<endl;

            }else{
                cout<<"YES"<<endl;
                for(int i=1;i<=m-1;i++) cout<<1<<" ";
                cout<<n-m+1<<endl;
            }
        }
    }
}

 其实并不需要考虑这么多,学习别人的思路还是蛮重要的

先构造出来一个序列,根据必要的条件进行判断

一开始肯定考虑全部拿1 或 2 

如果拿 1 的话 那么拿的最后一个数字就是 n-k+1  如果这个数大于 0 且这个数是奇数,那么构造出来了。

如果拿2 的话,那么拿的最后一个数字就是n - 2(k+1) ,如果这个数大于 0 且这个数是偶数,就输出就行了。

如果这两个方法都构造不出来,就直接NO

-——————————————————————————

个人方法是判奇偶

n如果是奇数,那么就需要奇数个奇数相加,同时最后一个奇数要为正

n如果偶数,那么就考虑拿奇数还是偶数,

如果 m 是奇数  那么一定要拿偶数,   奇数个偶数相加为偶数

如果 m 是偶数 都可以,但拿奇数能的构造结果的可能一定由于偶数的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值