菜鸡的CF之旅
Posted kksk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了菜鸡的CF之旅相关的知识,希望对你有一定的参考价值。
A. Odd Selection
题目链接:https://codeforces.ml/contest/1363/problem/A
题目意思大概就是输入一个长度为n的数组,然后问能不能在这个数组中选择x个数,使其相加的和为奇数。
思考:
我们都知道,奇数+奇数=偶数
偶数+偶数=偶数
偶数+奇数=奇数
其中我们可以发现,一个数加上偶数并不会改变这个数的奇偶,再然后我们发现奇数个奇数相加为奇数,偶数个奇数相加为偶数.
这样我们就可以把x拆分为n1,n2,其中n1则为从数组中选择的奇数的个数,n2为选择偶数的个数
比赛时这道题想太久了,所以有点着急,代码写的有点乱
#include <iostream> using namespace std; int t,n,x,ji,ou; int a[1007]; int main(){ scanf("%d",&t); while(t--){ scanf("%d%d",&n,&x); ji=0,ou=0; for(int i=1;i<=n;i++){\统计数组中奇数和偶数的个数 scanf("%d",&a[i]); if(a[i]%2==0) ou++; else ji++; } if(x%2==0){ int n1=x-1,n2=1,flag=0;\将x拆分 while(n1>0){\遍历拆分的x if(ji>=n1&&ou>=n2){ flag=1; } n1-=2,n2+=2; } if(flag) cout<<"Yes"<<endl; else cout<<"No"<<endl; }else{ int n1=x,n2=0,flag=0; while(n1>0){ if(ji>=n1&&ou>=n2){ flag=1; } n1-=2,n2+=2; } if(flag) cout<<"Yes"<<endl; else cout<<"No"<<endl; } } }
以上是关于菜鸡的CF之旅的主要内容,如果未能解决你的问题,请参考以下文章