CF1363A 题解

洛谷链接&CF 链接

1|0题目简述

共有 T 组数据。

对于每组数据,给定 n,xn 个数,问是否可以从 n 个数中选 x 个使其和为奇数,可以输出 Yes,否则输出 No

2|0思路

首先在输入过程中记录奇数的个数,接着特判没有奇数的情况,直接输出 No 即可

接着如果奇数有偶数个,则把奇数个数减一,因为我们拿着偶数个奇数没有任何用处,所以扔掉一个即可。

下面判断 x 是否大于奇数个数,如果大于且剩余偶数可补上空缺,可输出 Yes;如果不大于则判断是否有偶数或 x 为奇数,满足其中一个即可输出 Yes;否则输出 No

下面是代码实现:

#include<iostream> using namespace std; int T, n, x; int main() { cin >> T; // 多组输入 while(T --) { int sum = 0; // 初始化奇数个数 cin >> n >> x; for(int i = 1, tmp; i <= n; i++) { cin >> tmp; if (tmp & 1) sum++; // 如果是奇数则加 1 } if(!sum) { cout << "No\n"; // 没有奇数特判输出 No continue; // 直接返回 } if(!(sum & 1)) sum --, n --; // 奇数个数为偶数处理 if(x >= sum && (x - sum) <= (n - sum)) { cout << "Yes\n"; continue; } // 情况 1 if(x < sum) if((n - sum) > 0 || x % 2 != 0) { cout << "Yes\n"; continue; } // 情况 2 printf ("No\n"); // 情况 3,直接输出 No } return 0; }

提交记录

The End!


__EOF__

本文作者So_noSlack
本文链接https://www.cnblogs.com/So-noSlack/p/17601074.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   So_noSlack  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示