Submission #702379

# Submission time Handle Problem Language Result Execution time Memory
702379 2023-02-23T20:37:34 Z bebra Snake Escaping (JOI18_snake_escaping) C++17
12 / 100
2000 ms 9284 KB
#include <bits/stdc++.h>
using namespace std;

#define dbg(x) cerr << #x << ": " << x << endl;


constexpr int MAX_Q = 1e6 + 5;
constexpr int MAX_BIT = 20;
constexpr int MAX_N = 1 << 20;
constexpr int MAGIC = 13;

int ans[MAX_Q];
int dp[MAX_N];


int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int k, q;
    cin >> k >> q;

    string s;
    cin >> s;

    map<int, vector<pair<int, int>>> shifts;
    for (int j = 0; j < q; ++j) {
        string t;
        cin >> t;
        reverse(t.begin(), t.end());

        int mask = 0;
        int shift = 0;
        int bits_cnt = 0;
        for (int i = 0; i < k; ++i) {
            if (t[i] == '?') {
                mask |= 1 << i;
                ++bits_cnt;
            } else if (t[i] == '1') {
                shift |= 1 << i;
            }
        }

        if (bits_cnt <= MAGIC) {
            int res = s[shift] - '0';
            for (int submask = mask; submask > 0; submask = (submask - 1) & mask) {
                res += s[submask + shift] - '0';
            }
            ans[j] = res;
        } else {
            shifts[shift].emplace_back(mask, j);
        }
    }

    int n = 1 << k;
    for (const auto& [shift, values] : shifts) {
        memset(dp, 0, sizeof(dp));

        for (int mask = 0; (mask | shift) < n; ++mask) {
            if ((mask & shift) == 0) {
                dp[mask] = s[mask | shift] - '0';
            }
        }

        for (int bit = 0; bit < k; ++bit) {
            if (shift & (1 << bit)) continue;

            for (int mask = 0; (mask | shift) < n; ++mask) {
                if ((mask & shift) != 0) continue;

                if (mask & (1 << bit)) {
                    dp[mask] += dp[mask ^ (1 << bit)];
                }
            }
        }

        for (const auto& [mask, idx] : values) {
            ans[idx] = dp[mask];
        }
    }

    for (int i = 0; i < q; ++i) {
        cout << ans[i] << '\n';
    }
    
    return 0;
}


/*
4
1
3141592653589793
?01?


*/
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 239 ms 8188 KB Output is correct
12 Correct 247 ms 7788 KB Output is correct
13 Correct 193 ms 7124 KB Output is correct
14 Correct 180 ms 7144 KB Output is correct
15 Correct 250 ms 8268 KB Output is correct
16 Correct 198 ms 7352 KB Output is correct
17 Correct 193 ms 7292 KB Output is correct
18 Correct 1204 ms 9284 KB Output is correct
19 Correct 142 ms 6180 KB Output is correct
20 Correct 247 ms 7832 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 239 ms 8188 KB Output is correct
12 Correct 247 ms 7788 KB Output is correct
13 Correct 193 ms 7124 KB Output is correct
14 Correct 180 ms 7144 KB Output is correct
15 Correct 250 ms 8268 KB Output is correct
16 Correct 198 ms 7352 KB Output is correct
17 Correct 193 ms 7292 KB Output is correct
18 Correct 1204 ms 9284 KB Output is correct
19 Correct 142 ms 6180 KB Output is correct
20 Correct 247 ms 7832 KB Output is correct
21 Correct 338 ms 8156 KB Output is correct
22 Correct 428 ms 8396 KB Output is correct
23 Correct 211 ms 7376 KB Output is correct
24 Correct 192 ms 7160 KB Output is correct
25 Correct 472 ms 9200 KB Output is correct
26 Correct 241 ms 7756 KB Output is correct
27 Correct 240 ms 7636 KB Output is correct
28 Execution timed out 2066 ms 1376 KB Time limit exceeded
29 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 84 ms 2416 KB Output is correct
12 Correct 132 ms 5960 KB Output is correct
13 Correct 20 ms 2416 KB Output is correct
14 Correct 23 ms 2416 KB Output is correct
15 Correct 458 ms 2416 KB Output is correct
16 Correct 32 ms 2416 KB Output is correct
17 Correct 768 ms 5908 KB Output is correct
18 Correct 35 ms 6896 KB Output is correct
19 Correct 13 ms 2416 KB Output is correct
20 Execution timed out 2064 ms 5880 KB Time limit exceeded
21 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 239 ms 8188 KB Output is correct
12 Correct 247 ms 7788 KB Output is correct
13 Correct 193 ms 7124 KB Output is correct
14 Correct 180 ms 7144 KB Output is correct
15 Correct 250 ms 8268 KB Output is correct
16 Correct 198 ms 7352 KB Output is correct
17 Correct 193 ms 7292 KB Output is correct
18 Correct 1204 ms 9284 KB Output is correct
19 Correct 142 ms 6180 KB Output is correct
20 Correct 247 ms 7832 KB Output is correct
21 Correct 338 ms 8156 KB Output is correct
22 Correct 428 ms 8396 KB Output is correct
23 Correct 211 ms 7376 KB Output is correct
24 Correct 192 ms 7160 KB Output is correct
25 Correct 472 ms 9200 KB Output is correct
26 Correct 241 ms 7756 KB Output is correct
27 Correct 240 ms 7636 KB Output is correct
28 Execution timed out 2066 ms 1376 KB Time limit exceeded
29 Halted 0 ms 0 KB -