CSES - Aalto Competitive Programming 2024 - wk8 - Wed - Results
Submission details
Task:Skyline
Sender:aalto2024i_001
Submission time:2024-10-30 17:19:35 +0200
Language:C++ (C++20)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#20.00 sdetails
#30.00 sdetails
#40.00 sdetails
#50.00 sdetails
#60.00 sdetails
#70.00 sdetails
#80.00 sdetails
#90.00 sdetails
#100.00 sdetails
#110.00 sdetails
#120.00 sdetails
#130.00 sdetails
#140.00 sdetails
#150.00 sdetails
#160.00 sdetails
#170.00 sdetails
#180.00 sdetails
#190.00 sdetails
#200.00 sdetails
#210.00 sdetails
#220.00 sdetails
#230.00 sdetails
#240.00 sdetails
#250.00 sdetails
#260.00 sdetails
#270.00 sdetails
#280.00 sdetails
#290.00 sdetails
#300.00 sdetails
#310.02 sdetails
#320.02 sdetails
#330.02 sdetails
#340.02 sdetails
#350.02 sdetails
#360.02 sdetails
#370.02 sdetails
#380.02 sdetails
#390.02 sdetails
#400.02 sdetails
#410.07 sdetails
#420.07 sdetails
#430.07 sdetails
#440.06 sdetails
#450.06 sdetails
#460.06 sdetails
#470.07 sdetails
#480.07 sdetails
#490.06 sdetails
#500.06 sdetails
#51--details
#52--details
#53--details
#54--details

Code

#include <iostream>
#include <vector>
#include <cstdint>
#include <algorithm>

using namespace std;

void shift_or(vector<uint64_t> &dp, int shift_bits) {
    int n = dp.size();
    int shift_blocks = shift_bits / 64;
    int shift_remain = shift_bits % 64;

    if (shift_blocks >= n) {
        return;
    }

    for (int i = n - 1; i >= shift_blocks; i--) {
        uint64_t new_value = 0;
        if (shift_remain == 0) {
            new_value = dp[i - shift_blocks];
        } else {
            new_value = dp[i - shift_blocks] << shift_remain;
            if (i - shift_blocks - 1 >= 0) {
                new_value |= dp[i - shift_blocks - 1] >> (64 - shift_remain);
            }
        }
        dp[i] |= new_value;
    }
}

int main() {
    int n, q;
    cin >> n >> q;
    vector<int> a(n);
    int total_sum = 0;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
        total_sum += a[i];
    }

    vector<int> b(q);
    for (int i = 0; i < q; i++) {
        cin >> b[i];
    }

    int dp_size = (total_sum + 63) / 64 + 1;
    vector<uint64_t> dp(dp_size, 0);
    dp[0] = 1ULL;

    for (int i = 0; i < n; i++) {
        shift_or(dp, a[i]);
    }

    for (int i = 0; i < q; i++) {
        if (b[i] > total_sum) {
            cout << "No";
        } else {
            int index = b[i] / 64;
            int offset = b[i] % 64;
            bool sum = false;
            if (index < dp_size) {
                sum = (dp[index] & (1ULL << offset)) != 0;
            }
            cout << (sum ? "Yes" : "No");
            if (sum)
                cout << "Yes";
            else cout << "No";
        }
        if (i < q - 1) cout << ' ';
    }
    cout << endl;

    return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
1 20

29 43 23 70 56 72 72 50 43 79 ...

correct output
No No No No No No No No No No ...

user output
No No No No No No No No No No ...

Test 2

Verdict:

input
2 20
8 8 
6 38 42 31 55 41 90 8 74 92 72...

correct output
No No No No No No No Yes No No...

user output
NoNo No No No No No No YesYes ...

Test 3

Verdict:

input
2 20
8 10 
67 92 41 94 85 41 87 67 71 1 2...

correct output
No No No No No No No No No No ...

user output
No No No No No No No No No NoN...

Test 4

Verdict:

input
3 20
8 8 10 
58 60 46 57 39 26 28 19 67 99 ...

correct output
No No No No No Yes No No No No...

user output
No No No No No YesYes No NoNo ...

Test 5

Verdict:

input
3 20
1 7 8 
30 69 38 80 10 38 83 43 83 65 ...

correct output
No No No No No No No No No No ...

user output
No No No No NoNo No No No No N...

Test 6

Verdict:

input
3 20
10 4 3 
83 7 5 38 11 99 60 10 53 61 42...

correct output
No Yes No No No No No Yes No N...

user output
No YesYes NoNo No NoNo No No Y...

Test 7

Verdict:

input
4 20
1 9 5 2 
18 36 87 78 99 50 94 76 29 43 ...

correct output
No No No No No No No No No No ...

user output
No No No No No No No No No No ...

Test 8

Verdict:

input
4 20
1 7 4 7 
79 78 78 48 66 96 96 100 6 84 ...

correct output
No No No No No No No No No No ...

user output
No No No No No No No No NoNo N...

Test 9

Verdict:

input
4 20
8 10 8 2 
22 50 48 68 61 28 20 26 95 53 ...

correct output
No No No No No Yes Yes Yes No ...

user output
NoNo No No No No YesYes YesYes...

Test 10

Verdict:

input
4 20
6 1 9 10 
16 91 9 41 27 20 58 31 19 20 9...

correct output
Yes No Yes No No Yes No No Yes...

user output
YesYes No YesYes No No YesYes ...

Test 11

Verdict:

input
5 20
6 8 9 7 9 
55 85 43 63 65 39 44 30 90 6 9...

correct output
No No No No No Yes No Yes No Y...

user output
No No No No No YesYes No YesYe...

Test 12

Verdict:

input
5 20
10 8 10 1 2 
31 100 15 24 10 40 19 39 35 67...

correct output
Yes No No No Yes No Yes No No ...

user output
YesYes No NoNo NoNo YesYes No ...

Test 13

Verdict:

input
5 20
2 1 10 6 10 
44 49 43 33 34 16 21 70 62 12 ...

correct output
No No No No No Yes Yes No No Y...

user output
No No No No No YesYes YesYes N...

Test 14

Verdict:

input
5 20
1 8 9 3 2 
52 57 90 44 90 2 13 5 21 25 6 ...

correct output
No No No No No Yes Yes Yes Yes...

user output
No No No No No YesYes YesYes Y...
Truncated

Test 15

Verdict:

input
5 20
10 6 2 10 9 
72 61 70 60 22 15 98 23 1 70 2...

correct output
No No No No Yes Yes No No No N...

user output
No No No No YesYes YesYes No N...

Test 16

Verdict:

input
5 20
2 10 10 4 4 
92 98 49 9 62 40 77 36 52 49 3...

correct output
No No No No No No No No No No ...

user output
No No No NoNo No No No No No N...

Test 17

Verdict:

input
5 20
10 4 3 9 1 
5 38 11 99 60 10 53 61 42 54 3...

correct output
Yes No Yes No No Yes No No No ...

user output
YesYes No YesYes No No YesYes ...

Test 18

Verdict:

input
5 20
4 8 4 6 10 
73 46 98 31 54 27 51 9 8 42 27...

correct output
No No No No No No No No Yes No...

user output
No No No NoNo No NoNo No NoNo ...

Test 19

Verdict:

input
5 20
1 10 3 9 4 
54 82 24 43 2 62 44 77 41 41 5...

correct output
No No Yes No No No No No No No...

user output
No No YesYes No NoNo No No No ...

Test 20

Verdict:

input
5 20
4 6 6 6 2 
14 32 15 2 22 88 42 14 25 14 9...

correct output
Yes No No Yes Yes No No Yes No...

user output
YesYes No NoNo YesYes YesYes N...

Test 21

Verdict:

input
10 20
6 8 9 7 9 6 9 5 7 7 
39 44 30 90 6 97 28 39 48 80 8...

correct output
Yes Yes Yes No Yes No Yes Yes ...

user output
YesYes YesYes YesYes No YesYes...
Truncated

Test 22

Verdict:

input
10 20
10 8 10 1 2 4 10 2 3 1 
40 19 39 35 67 40 94 54 85 42 ...

correct output
Yes Yes Yes Yes No Yes No No N...

user output
YesYes YesYes YesYes YesYes No...
Truncated

Test 23

Verdict:

input
10 20
2 1 10 6 10 5 5 5 4 4 
16 21 70 62 12 30 49 27 64 63 ...

correct output
Yes Yes No No Yes Yes Yes Yes ...

user output
YesYes YesYes No No YesYes Yes...
Truncated

Test 24

Verdict:

input
10 20
1 8 9 3 2 6 6 9 5 9 
2 13 5 21 25 6 10 45 70 3 15 4...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
YesYes YesYes YesYes YesYes Ye...
Truncated

Test 25

Verdict:

input
10 20
10 6 2 10 9 8 7 7 6 3 
15 98 23 1 70 26 91 44 64 78 1...

correct output
Yes No Yes No No Yes No Yes No...

user output
YesYes No YesYes NoNo No YesYe...
Truncated

Test 26

Verdict:

input
10 20
2 10 10 4 4 10 10 6 2 8 
40 77 36 52 49 30 100 19 81 9 ...

correct output
Yes No Yes Yes No Yes No No No...

user output
YesYes No YesYes YesYes NoNo Y...
Truncated

Test 27

Verdict:

input
10 20
10 4 3 9 1 1 4 2 10 6 
10 53 61 42 54 34 49 63 83 44 ...

correct output
Yes No No Yes No Yes Yes No No...

user output
YesYes No No YesYes No YesYes ...
Truncated

Test 28

Verdict:

input
10 20
4 8 4 6 10 8 6 10 4 6 
27 51 9 8 42 27 2 50 53 68 87 ...

correct output
No No No Yes Yes No No Yes No ...

user output
NoNo NoNo NoNo YesYes YesYes N...
Truncated

Test 29

Verdict:

input
10 20
1 10 3 9 4 6 9 3 5 1 
62 44 77 41 41 53 88 48 93 56 ...

correct output
No Yes No Yes Yes No No Yes No...

user output
No YesYes No YesYes YesYes No ...
Truncated

Test 30

Verdict:

input
10 20
4 6 6 6 2 2 4 2 2 4 
88 42 14 25 14 9 40 35 50 17 3...

correct output
No No Yes No Yes No No No No N...

user output
No No YesYes NoNo YesYes NoNo ...

Test 31

Verdict:

input
100 1000
59286 71521 84428 60278 85796 ...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
YesYes YesYes YesYes YesYes Ye...
Truncated

Test 32

Verdict:

input
100 1000
99721 72034 93258 12 12813 302...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
YesYes YesYes YesYes YesYes Ye...
Truncated

Test 33

Verdict:

input
100 1000
18509 2593 93156 54968 94775 4...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
YesYes YesYes YesYes YesYes Ye...
Truncated

Test 34

Verdict:

input
100 1000
7073 70816 83997 29091 12134 5...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
YesYes YesYes YesYes YesYes Ye...
Truncated

Test 35

Verdict:

input
100 1000
90064 54725 17270 97270 85564 ...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
YesYes YesYes YesYes YesYes Ye...
Truncated

Test 36

Verdict:

input
100 1000
5520 87074 83134 20672 36374 9...

correct output
No No Yes No No Yes Yes No Yes...

user output
NoNo NoNo YesYes NoNo NoNo Yes...
Truncated

Test 37

Verdict:

input
100 1000
94750 33199 20941 82125 6426 4...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
YesYes YesYes YesYes YesYes Ye...
Truncated

Test 38

Verdict:

input
100 1000
22734 77994 31898 43842 97824 ...

correct output
No Yes No No No Yes No Yes No ...

user output
NoNo YesYes NoNo NoNo NoNo Yes...
Truncated

Test 39

Verdict:

input
100 1000
1112 96856 23945 86921 37753 5...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
YesYes YesYes YesYes YesYes Ye...
Truncated

Test 40

Verdict:

input
100 1000
36448 50188 49914 49578 756 13...

correct output
Yes Yes No Yes No Yes Yes Yes ...

user output
YesYes YesYes NoNo YesYes NoNo...
Truncated

Test 41

Verdict:

input
200 1000
59286 71521 84428 60278 85796 ...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
YesYes YesYes YesYes YesYes Ye...
Truncated

Test 42

Verdict:

input
200 1000
99721 72034 93258 12 12813 302...

correct output
Yes Yes No Yes Yes Yes Yes Yes...

user output
YesYes YesYes NoNo YesYes YesY...
Truncated

Test 43

Verdict:

input
200 1000
18509 2593 93156 54968 94775 4...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
YesYes YesYes YesYes YesYes Ye...
Truncated

Test 44

Verdict:

input
200 1000
7073 70816 83997 29091 12134 5...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
YesYes YesYes YesYes YesYes Ye...
Truncated

Test 45

Verdict:

input
200 1000
90064 54725 17270 97270 85564 ...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
YesYes YesYes YesYes YesYes Ye...
Truncated

Test 46

Verdict:

input
200 1000
5520 87074 83134 20672 36374 9...

correct output
No No No No No No No No Yes No...

user output
NoNo NoNo NoNo NoNo NoNo NoNo ...
Truncated

Test 47

Verdict:

input
200 1000
94750 33199 20941 82125 6426 4...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
YesYes YesYes YesYes YesYes Ye...
Truncated

Test 48

Verdict:

input
200 1000
22734 77994 31898 43842 97824 ...

correct output
No Yes No No Yes Yes Yes Yes Y...

user output
NoNo YesYes NoNo NoNo YesYes Y...
Truncated

Test 49

Verdict:

input
200 1000
1112 96856 23945 86921 37753 5...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
YesYes YesYes YesYes YesYes Ye...
Truncated

Test 50

Verdict:

input
200 1000
36448 50188 49914 49578 756 13...

correct output
Yes Yes No Yes No No No Yes No...

user output
YesYes YesYes NoNo YesYes NoNo...
Truncated

Test 51

Verdict:

input
2000 100000
59286 71521 84428 60278 85796 ...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
(empty)

Test 52

Verdict:

input
2000 100000
99721 72034 93258 12 12813 302...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
(empty)

Test 53

Verdict:

input
2000 100000
18509 2593 93156 54968 94775 4...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
(empty)

Test 54

Verdict:

input
2000 100000
7073 70816 83997 29091 12134 5...

correct output
Yes Yes Yes Yes Yes Yes Yes Ye...

user output
(empty)