编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间
#80731 #1086. jwp的幸运集合 Accepted 100 104 ms 1012 K C++ 11 (Clang) / 2.3 K 15291309895 2022-08-02 12:07:03
显示原始代码
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;

map<long long, int> mp[2];

int main() {
    int n, a[40], A[40], B[40], answer = 0;
    cin >> n;
    int m = n, A_len = n >> 1, B_len = n - (n >> 1);
    while (m--) {
        cin >> a[m];
    }

    for (int i = 0; i < n; i++) {
        (i < A_len) ? A[i] = a[i] : B[n - 1 - i] = a[i];  // A : 0 ~ n >> 2 - 1   // B : n >> 2 ~ n - 1
    }
    //    cout << A_len << endl;

    //    for (int i = 0; i < A_len; i++){
    //        cout << A[i] << endl;
    //    }

    for (long long j = 0; j < (1 << A_len); j++) {
        long long sum_a = 0, times_a = 0;
        //        int k = 0
        for (long long k = 0; k < A_len; k++) {
            if ((j >> k) & 1) {
                sum_a += A[k];
                times_a += 1;
            }

            //          cout << sum_a << " " << times_a << endl ;
        }

        //        while (k < j){
        //            if ((j >> k) & 1){
        //                sum_a += B[A_len - k];
        //                times_a += 1;
        //                k++;
        //            } else k++;
        //        }

        mp[times_a % 2][sum_a]++;
    }

    for (long long j = 0; j < (1 << B_len); j++) {
        long long sum_b = 0, times_b = 0;
        //        int k = 0;

        for (long long k = 0; k < B_len; k++) {
            if ((j >> k) & 1) {
                sum_b += B[k];
                times_b += 1;
            }
        }

        //        while (k < j){
        //            if ((j >> k) & 1){
        //                sum_b += B[A_len - k];
        //                times_b += 1;
        //                k++;
        //            } else k++;
        //        }

        answer += mp[times_b % 2][-sum_b];
    }

    cout << answer - 1;

    return 0;
}

//
// void subset(int a[], int len){
//    int sum = 0;
//
//    for (int mask = 1, total = 1 << len; mask < total; mask ++){
//        Ans[mask][0] = mask;
//
//        for (int i = 0; i < len; i++){
//            Ans[mask][2] = 0;       // 初始化
//            if ((mask >> i) & 1) {
//                sum += a[len - i];        // 计算每个子集的和
//                Ans[mask][2]++;     // 计算是偶数还是奇数
//            }
//            Ans[mask][1] = sum;
//        }
//        Ans[mask][2] %= 2;          // 奇数输出1,偶数输出0
//    }
//}
子任务 #1
Accepted
得分:100
测试点 #1
Accepted
得分:100
用时:2 ms
内存:232 KiB

输入文件(1.in

5
1 5 -4 3 -1

答案文件(1.out

1

用户输出

1

系统信息

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

输入文件(2.in

6
-1 2 2 5 5 -5

答案文件(2.out

2

用户输出

2

系统信息

Exited with return code 0
测试点 #3
Accepted
得分:100
用时:4 ms
内存:384 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
用时:4 ms
内存:324 KiB

输入文件(4.in

1
0

答案文件(4.out

0

用户输出

0

系统信息

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

输入文件(5.in

4
1 4 -1 0

答案文件(5.out

1

用户输出

1

系统信息

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

输入文件(6.in

3
0 0 0

答案文件(6.out

3

用户输出

3

系统信息

Exited with return code 0
测试点 #7
Accepted
得分:100
用时:18 ms
内存:880 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
用时:17 ms
内存:1012 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
用时:9 ms
内存:236 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
用时:40 ms
内存:892 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