用户输出
1
系统信息
Exited with return code 0
编号 | 题目 | 状态 | 分数 | 总时间 | 内存 | 代码 / 答案文件 | 提交者 | 提交时间 |
---|---|---|---|---|---|---|---|---|
#82046 | #1086. jwp的幸运集合 | Accepted | 100 | 152 ms | 640 K | C++ 11 / 1.3 K | y | 2023-03-10 17:20:29 |
#include <cstdio>
#include <map>
#define N 1000009
#define RI register int
#define Min(x, y) ((x) < (y) ? (x) : (y))
using namespace std;
bool ind = false;
map<int, int> mp;
int n, a[40], num[2][N], sa, ans;
map<int, int>::iterator iter;
inline int read();
void dfs(int now, int lim, int sum, int tim) {
if (now > lim) {
iter = mp.find(sum);
if (iter == mp.end())
mp[sum] = ++sa;
++num[tim][mp[sum]];
return;
}
dfs(now + 1, lim, sum, tim);
dfs(now + 1, lim, sum + a[now], tim ^ 1);
}
void dfs2(int now, int lim, int sum, int tim) {
if (now > lim) {
iter = mp.find(-sum);
if (iter == mp.end())
return;
ans += num[tim][mp[-sum]];
if (!sum && !tim)
++ans;
return;
}
dfs2(now + 1, lim, sum, tim);
dfs2(now + 1, lim, sum + a[now], tim ^ 1);
}
int main() {
n = read();
int n2 = Min(18, n);
for (RI i = 1; i <= n; ++i) a[i] = read();
dfs(1, n2, 0, 0);
--num[0][mp[0]];
if (n2 == n)
return printf("%d\n", num[0][mp[0]]), 0;
dfs2(n2 + 1, n, 0, 0);
printf("%d\n", ans - 1);
return 0;
}
inline int read() {
int x = 0, fh = 1;
char c = getchar();
while (c > '9' || c < '0') fh = c == '-' ? -1 : fh, c = getchar();
while (c >= '0' && c <= '9') {
x *= 10;
x += c - '0';
c = getchar();
}
return x * fh;
}
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