Codeforces Round #577(Div. 2) ~ B
题目大意:
给你n个数,你能够选择两个数,可无限将这两个数同时减一,直到其中一数为0。问是否能将所用的数变成0。
思路:
其实就是数值相互抵消的问题,可想到当所有数的和为奇数时,肯定会有一个1无法消去;另外当一个数特别大时,大过了其他数的和,即最大值大于所有和的一半时,这个最大值也是无法变成0的。
解题代码:
1 #include <cstdio> 2 #include <iostream> 3 #include <algorithm> 4 #include <cmath> 5 #include <string> 6 #include <cstring> 7 #include <map> 8 using namespace std; 9 const long long N = 1e9 + 7; 10 typedef long long ll; 11 map <char,int> ma; 12 ll sum; 13 int n,maxnum,a; 14 15 int main() 16 { 17 cin >> n; 18 while(n--) 19 { 20 cin >> a; 21 sum += a; 22 maxnum = max(maxnum , a); 23 } 24 if(sum % 2 == 1 || maxnum > sum/2) 25 cout << "NO" << endl; 26 else 27 cout << "YES" << endl; 28 return 0; 29 }

浙公网安备 33010602011771号