用户输出
1
系统信息
Exited with return code 0
编号 | 题目 | 状态 | 分数 | 总时间 | 内存 | 代码 / 答案文件 | 提交者 | 提交时间 |
---|---|---|---|---|---|---|---|---|
#20679 | #1086. jwp的幸运集合 | Accepted | 100 | 127 ms | 1540 K | C++ / 1.2 K | wahahah | 2019-07-30 13:57:12 |
#include <bits/stdc++.h>
using namespace std;
int a[40];
typedef pair<long long, int> pp;
map<pp, int> mp;
int n;
long long num = 0;
void dfs1(long long sum, int len, int deep, int b[]) {
if (deep == n / 2) {
if (len != 0) {
len = len % 2 + 2;
}
pp p(sum, len);
mp[p]++;
return;
}
dfs1(sum, len, deep + 1, b);
dfs1(sum + b[deep], len + 1, deep + 1, b);
}
void dfs2(long long sum, int len, int deep, int c[]) {
if (deep == n - n / 2) {
if (len != 0) {
len = len % 2 + 2;
}
if (len == 0) {
pp t(0, 2);
num = num + mp[t];
return;
} else {
pp p(-sum, len);
pp u(-sum, len - 2);
num += mp[p] + mp[u];
return;
}
}
dfs2(sum, len, deep + 1, c);
dfs2(sum + c[deep], len + 1, deep + 1, c);
}
int main() {
int i, j;
scanf("%d", &n);
int b[n / 2];
int c[n - n / 2];
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
sort(a, a + n);
for (i = 0; i < n / 2; i++) {
b[i] = a[i];
}
for (i = n / 2; i < n; i++) {
c[i - n / 2] = a[i];
}
dfs1(0, 0, 0, b);
dfs2(0, 0, 0, c);
printf("%lld", num);
}
31
749 349 69 -880 282 -926 -831 225 988 552 -193 634 369 476 204 487 387 -803 -370 -975 -17 -485 3
<40 bytes omitted>
用户输出
260459
系统信息
Exited with return code 0
31
362 -14 -181 -465 -400 -232 26 963 70 728 -728 -222 -510 854 139 386 555 994 103 279 213 76 953
<36 bytes omitted>
用户输出
81861
系统信息
Exited with return code 0
用户输出
16383
系统信息
Exited with return code 0