思想
样例1解析
2 2 3 2 3
sum=2+2+3+2+3=12
12/2=6
样例1有3个2,2+2+2=6 样例1有2个3,3+3=6
所以样例1可以平均分,输出"YES"
样例2解析
2 3 3 3 3
sum=2+3+3+3+3=14 14/2=7
7!=2 && 7!=3+3+3+3
样例2不能平均分,输出"NO"
code
我们先统计一下2,3分别的个数cnt2,cn3。同时计算一下总和。
然后我们看总和是否能被2整除,不能那么就不够平均分,不用再往下算了。
否则,我们可以去枚举2或者枚举3,就拿枚举2举例吧,我们每枚举一个2就去看一下剩下的总和能否被3整除 ,并且看一下剩下的数的个数是否是3的倍数。如果两个条件都满足,就说明可以被平均分,输出"YES",否则就说明不能被平均分,输出"NO"
#include <bits/stdc++.h>
using namespace std;
int cnt2, cnt3, sum;
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
sum += x;
if (x == 2)
cnt2++;
else
cnt3++;
}
if (sum % 2 != 0) {
cout << "NO" << endl;
return 0;
}
sum /= 2;
//枚举2
for (int i = 0; i <= cnt2 && 2 * i <= sum; i++) {
int res = sum - i * 2;
if (res % 3 == 0 && res / 3 <= cnt3) {
cout << "YES" << endl;
return 0;
}
}
cout << "NO" << endl;
return 0;
}