原题链接:Problem - 1201B - Codeforces
题目大意:给你n个数(n >= 2),每次选择两个数然后把它们分别减1,问你最后整个数列能不能都为0。
思路:
1.相当于一次减2,最后整个序列的和要为0,那么整个序列的和应该是偶数才行,如果是奇数就直接pass掉;
2.如果数列中最大的数比整个数列的和的一半还大,那么在删除过程中最后这个值是还会多出来值删不掉的,所以如果有这样的情况也不能满足。
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
typedef pair<int, int> PII;
const double pi = acos(-1.0);
#define rep(i, n) for (int i = 1; i <= (n); ++i)
#define rrep(i, n) for (int i = n; i >= (1); --i)
typedef long long ll;
#define sqar(x) ((x)*(x))
const int N = 1e5 + 10;
ll a[N];
int main(){
int n;
cin >> n;
ll sum = 0;
rep(i, n) cin >> a[i], sum += a[i];
if(sum & 1){
cout << "NO";
return 0;
}
sort(a + 1, a + 1 + n);
if(a[n] > sum / 2) cout << "NO";
else cout << "YES";
return 0;
}