#include <algorithm> #include <iostream> #include <vector> #include <unordered_set> using namespace std; int main() { int n; cin >> n; vector<int> vec; int num1 = 0, num2 = 0, al = 0; while (n--) { int num; cin >> num; if (num % 5 == 0) { num1 += num; } else if (num % 3 == 0) { num2 += num; } else { vec.emplace_back(num); al += num; } } unordered_set<int> s1, s2; s1.insert(0); //枚举所有组合的不重复和,0为空数组 for (int i = 0; i < vec.size(); i++) { //遍历每一个数字 s2 = s1; //每个数字都要与当前集合的每个数相加组成新的和 for (auto it : s2) s1.insert(it + vec[i]); } bool flag = false; for (auto it : s1) { //遍历枚举的集合 if (it + num1 == num2 + al - it) { //分成两部分后相等 flag = true; break; } } cout << (flag ? "true" : "false") << endl; return 0; } // 64 位输出请用 printf("%lld")