题目:
给定一个长度为 n 的数组 a,chuck 每次有两种指令:
-
第一个指令,指定数组中的任意元素 a[i] ,使得 a[i]-=1 (减一)。
-
第二个指令,指定数组中的任意元素 a[i] ,使得 a[i]-=2 (减二)。
现在 chuck 每次操作需要同时使用这两个指令,两个指令可以指定数组中相同的元素,也可以指定数组中不同的元素 。chuck 想知道能不能在 k 次操作下把数组的所有元素全部变成小于等于 0
输入格式:
第一行一个正整数 n(1<=n<=1000) ,表示数组的元素个数。
第二行 n 个正整数 ai(1<=ai<=1000) ,表示数组中每个元素。
第三行包含一个正整数 k(1<=k<=10^5) ,含义如上。
输出格式:
如果能通过 k 次操作,把数组所有元素全部变成小于等于 0 。
则输出"yes",否则输出"no"。
输入样例:
2
1 2
1
输出样例:
yes
输入样例:
2
4 2
2
输出样例:
yes
输入样例:
3
4 1 1
2
输出样例:
yes
答案:
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
int k;
cin >> k;
int res = 0;
for (int i = 0; i < n; i++) {
// 计算每个元素需要的最小操作次数:就是-2
// 如果是奇数要使得最后<=0,次数就+1
if(a[i]%2==1) res +=a[i]/2+1;
else res+=a[i]/2;
}
if (res <= k) {
cout << "yes" << endl;
} else {
cout << "no" << endl;
}
return 0;
}
其实这答题很简单,做的时候卡了。以为每次操作对所有的元素都可以执行