首个提交,首个解题
2025-10-02 16:26:22
发布于:浙江
5阅读
0回复
0点赞
点个赞吧
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<long long> a(n);
for (int i = 0; i < n; ++i) cin >> a[i];
int m = 1 << n;
vector<long long> s(m, 0);
for (int i = 1; i < m; ++i) {
int l = i & -i;
int j = __builtin_ctz(l);
s[i] = s[i ^ l] + a[j];
}
unordered_map<long long, vector<int>> mp;
for (int i = 0; i < m; ++i) mp[s[i]].push_back(i);
unordered_set<int> r;
for (int t = 1; t < m; ++t) {
long long st = s[t];
if (st % 2 != 0) continue;
long long g = st / 2;
if (!mp.count(g)) continue;
for (int sm : mp[g]) {
if ((sm & t) == sm && sm != 0 && sm != t) {
r.insert(t);
break;
}
}
}
cout << r.size() << endl;
return 0;
}
这里空空如也






有帮助,赞一个