CodeForces 1363a思路

题意:
给定n和x,并输入一个长度为n的数组,问能否找出x个数相加为奇数,如果可以输出yes,不然输出no
思路:
数的和为奇数还是偶数关系到奇数和偶数的多少,所以首先统计奇数和偶数的多少。然后再想一下它们的和与奇数和偶数个数的关联,奇数的个数必须是奇数个才可以,并且此时的所需要偶数个数应该小于所有的偶数个数,于是就从1一直模拟到odd的个数。
另一个方法,只存在三种情况为no。1.odd=0。2.even=0并且x为偶数。3.x=n并且odd=偶数。

//法1
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--){
        int n,x,s[1005],odd=0,even=0;
        cin>>n>>x;
        for(int i=0;i<n;i++){
            cin>>s[i];
            if(s[i]%2!=0) odd++;
            else even++;
        }
        int flag=0;
        for(int i=1;i<=odd&&i<=x;i=i+2){
            int j=x-i;
            if(j<=even) {
                flag=1;break;
            }
        }
        if(flag) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
}
//法2
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--){
        int n,x,s[1005],odd=0,even=0;
        cin>>n>>x;
        for(int i=0;i<n;i++){
            cin>>s[i];
            if(s[i]%2!=0) odd++;
            else even++;
        }
        if(odd==0) cout<<"No"<<endl;
        else if(even==0&&x%2==0) cout<<"No"<<endl;
        else if(x==n&&odd%2==0) cout<<"No"<<endl;
        else cout<<"Yes"<<endl;
    }
}

套路:模拟和规律

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值