1 条题解
-
0
解题思路
关键思想: 个数的和为奇数,当且仅当我们从中选择了奇数个奇数。(这显然是一个正确的说法)
详细解释:
首先维护两个变量num_odd和num_even,分别表示数组中奇数和偶数的个数。然后我们枚举可能选择的奇数个数 , 取值为 ,直到 。对于每个 ,检查剩余的 个元素是否都能由偶数提供,即判断 是否成立。如果存在这样的 ,则输出"Yes",否则输出"No"。时间复杂度:
#include <bits/stdc++.h> using namespace std; #define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define endl "\n" #define int long long const int N = 2e5 + 5; int n, x; int a[N], f[2]; int32_t main() { IOS; int t; cin >> t; while(t--) { f[0] = f[1] = 0; cin >> n >> x; for(int i = 1; i <= n; i++) { cin >> a[i]; f[a[i] % 2]++; } bool flag = 0; for(int i = 1; i <= f[1] && i <= x; i += 2) //Fix no of odd { int have = f[0], need = x - i; if(need <= f[0]) flag = 1; } if(flag) cout << "Yes" << endl; else cout << "No" << endl; } return 0; }
- 1
信息
- ID
- 6842
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者