编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间
#70291 #1086. jwp的幸运集合 Accepted 100 1156 ms 26116 K Java / 2.6 K Rhodoks 2022-06-28 8:52:15
显示原始代码

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) {
        Read in = new Read();
        int n = in.nextInt();
        int k = n / 2;
        int m = n - k;
        int[] b = in.readArray(k);
        int[] c = in.readArray(m);
        Map<Integer, int[]> c1 = new HashMap<>();
        Map<Integer, int[]> c2 = new HashMap<>();
        for (int i = 0; i < (1 << k); i++) {
            int now = 0;
            int cnt = 0;
            for (int j = 0; j < k; j++) {
                if (((i >> j) & 1) == 1) {
                    now += b[j];
                    cnt++;
                }
            }
            if (!c1.containsKey(now)) {
                c1.put(now, new int[2]);
            }
            if (cnt % 2 == 0) {
                c1.get(now)[0]++;
            } else
                c1.get(now)[1]++;
        }

        for (int i = 0; i < (1 << m); i++) {
            int now = 0;
            int cnt = 0;
            for (int j = 0; j < m; j++) {
                if (((i >> j) & 1) == 1) {
                    now += c[j];
                    cnt++;
                }
            }
            if (!c2.containsKey(now)) {
                c2.put(now, new int[2]);
            }
            if (cnt % 2 == 0) {
                c2.get(now)[0]++;
            } else
                c2.get(now)[1]++;
        }

        long res = 0;
        for (int x : c1.keySet()) {
            if (c2.containsKey(-x)) {
                res += (long) c1.get(x)[0] * c2.get(-x)[0];
                res += (long) c1.get(x)[1] * c2.get(-x)[1];
            }
        }
        System.out.println(res - 1);
    }
    static class Read {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer("");

        String next() {
            while (!st.hasMoreTokens()) try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        int[] readArray(int n) {
            int[] a = new int[n];
            for (int i = 0; i < n; i++) a[i] = nextInt();
            return a;
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        char nextChar() {
            return next().charAt(0);
        }
    }
}
子任务 #1
Accepted
得分:100
测试点 #1
Accepted
得分:100
用时:62 ms
内存:11320 KiB

输入文件(1.in

5
1 5 -4 3 -1

答案文件(1.out

1

用户输出

1

系统信息

Exited with return code 0
测试点 #2
Accepted
得分:100
用时:69 ms
内存:11260 KiB

输入文件(2.in

6
-1 2 2 5 5 -5

答案文件(2.out

2

用户输出

2

系统信息

Exited with return code 0
测试点 #3
Accepted
得分:100
用时:68 ms
内存:11148 KiB

输入文件(3.in

10
5 -5 5 1 2 3 3 -1 3 1

答案文件(3.out

14

用户输出

14

系统信息

Exited with return code 0
测试点 #4
Accepted
得分:100
用时:72 ms
内存:11164 KiB

输入文件(4.in

1
0

答案文件(4.out

0

用户输出

0

系统信息

Exited with return code 0
测试点 #5
Accepted
得分:100
用时:69 ms
内存:11180 KiB

输入文件(5.in

4
1 4 -1 0

答案文件(5.out

1

用户输出

1

系统信息

Exited with return code 0
测试点 #6
Accepted
得分:100
用时:67 ms
内存:11116 KiB

输入文件(6.in

3
0 0 0

答案文件(6.out

3

用户输出

3

系统信息

Exited with return code 0
测试点 #7
Accepted
得分:100
用时:192 ms
内存:21272 KiB

输入文件(7.in

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>

答案文件(7.out

260459

用户输出

260459

系统信息

Exited with return code 0
测试点 #8
Accepted
得分:100
用时:154 ms
内存:17752 KiB

输入文件(8.in

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>

答案文件(8.out

81861

用户输出

81861

系统信息

Exited with return code 0
测试点 #9
Accepted
得分:100
用时:139 ms
内存:13460 KiB

输入文件(9.in

30
0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15

答案文件(9.out

16383

用户输出

16383

系统信息

Exited with return code 0
测试点 #10
Accepted
得分:100
用时:264 ms
内存:26116 KiB

输入文件(10.in

34
-480 -519 50 980 136 511 821 -785 471 -781 -452 33 -828 -95 61 939 -372 -942 163 622 447 -48 -46
<51 bytes omitted>

答案文件(10.out

2080461

用户输出

2080461

系统信息

Exited with return code 0