Submission #110091

# Submission time Handle Problem Language Result Execution time Memory
110091 2019-05-09T12:31:09 Z popovicirobert Snake Escaping (JOI18_snake_escaping) C++14
12 / 100
2000 ms 8192 KB
#include <bits/stdc++.h>
#define lsb(x) (x & (-x))
#define ll long long
#define ull unsigned long long
// 217
// 44

using namespace std;

int dp[1 << 20];

int main() {
    //ifstream cin("A.in");
    //ofstream cout("A.out");
    int i, l, q;
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

    cin >> l >> q;

    string str;
    cin >> str;

    for(int conf = 0; conf < (1 << l); conf++) {
        dp[conf] = str[conf] - '0';
    }
    for(int bit = 0; bit < l; bit++) {
        for(int conf = 0; conf < (1 << l); conf++) {
            if(conf & (1 << bit)) {
                dp[conf] += dp[conf ^ (1 << bit)];
            }
        }
    }

    unordered_map <int, int> mp;

    while(q > 0) {
        q--;

        string cur;
        cin >> cur;
        reverse(cur.begin(), cur.end());

        int cnf = 0, num = 0, val = 0;
        for(i = 0; i < l; i++) {
            val *= 3;
            if(cur[i] == '1') {
                cnf += (1 << i);
            }
            if(cur[i] == '?') {
                num++;
                val += 2;
            }
            else {
                val += cur[i] - '0';
            }
        }

        if(mp[val] > 0) {
            cout << mp[val] - 1 << "\n";
            continue;
        }

        vector <int> bit;

        if(num <= 10) {

            int ans = 0;

            for(i = 0; i < l; i++) {
                if(cur[i] == '?') {
                    bit.push_back(i);
                }
            }

            int sz = bit.size();
            for(int conf = 0; conf < (1 << sz); conf++) {
                int aux = cnf;
                for(i = 0; i < sz; i++) {
                    if(conf & (1 << i)) {
                        aux += (1 << bit[i]);
                    }
                }
                ans += str[aux] - '0';
            }

            mp[val] = ans + 1;
            cout << ans << "\n";
        }
        else {

            ll ans = 0;

            for(i = 0; i < l; i++) {
                if(str[i] == '1') {
                    bit.push_back(i);
                }
            }

            int sz = bit.size();
            for(int conf = 0; conf < (1 << sz); conf++) {

                int aux = cnf, cnt = 0;
                for(i = 0; i < sz; i++) {
                    if(conf & (1 << i)) {
                        aux -= (1 << bit[i]);
                        cnt++;
                    }
                }

                if(cnt & 1) {
                    ans -= dp[aux];
                }
                else {
                    ans += dp[aux];
                }

            }

            mp[val] = ans + 1;
            cout << ans << "\n";
        }

    }

    //cin.close();
    //cout.close();
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 3 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 3 ms 384 KB Output is correct
4 Correct 3 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 3 ms 384 KB Output is correct
7 Correct 3 ms 384 KB Output is correct
8 Correct 3 ms 256 KB Output is correct
9 Correct 3 ms 384 KB Output is correct
10 Correct 4 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 3 ms 384 KB Output is correct
4 Correct 3 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 3 ms 384 KB Output is correct
7 Correct 3 ms 384 KB Output is correct
8 Correct 3 ms 256 KB Output is correct
9 Correct 3 ms 384 KB Output is correct
10 Correct 4 ms 384 KB Output is correct
11 Correct 243 ms 4760 KB Output is correct
12 Correct 297 ms 4496 KB Output is correct
13 Correct 323 ms 3960 KB Output is correct
14 Correct 356 ms 4020 KB Output is correct
15 Correct 290 ms 4876 KB Output is correct
16 Correct 372 ms 4600 KB Output is correct
17 Correct 512 ms 6620 KB Output is correct
18 Correct 205 ms 5664 KB Output is correct
19 Correct 226 ms 2720 KB Output is correct
20 Correct 267 ms 4344 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 3 ms 384 KB Output is correct
4 Correct 3 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 3 ms 384 KB Output is correct
7 Correct 3 ms 384 KB Output is correct
8 Correct 3 ms 256 KB Output is correct
9 Correct 3 ms 384 KB Output is correct
10 Correct 4 ms 384 KB Output is correct
11 Correct 243 ms 4760 KB Output is correct
12 Correct 297 ms 4496 KB Output is correct
13 Correct 323 ms 3960 KB Output is correct
14 Correct 356 ms 4020 KB Output is correct
15 Correct 290 ms 4876 KB Output is correct
16 Correct 372 ms 4600 KB Output is correct
17 Correct 512 ms 6620 KB Output is correct
18 Correct 205 ms 5664 KB Output is correct
19 Correct 226 ms 2720 KB Output is correct
20 Correct 267 ms 4344 KB Output is correct
21 Correct 317 ms 4728 KB Output is correct
22 Incorrect 411 ms 5244 KB Output isn't correct
23 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 3 ms 384 KB Output is correct
4 Correct 3 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 3 ms 384 KB Output is correct
7 Correct 3 ms 384 KB Output is correct
8 Correct 3 ms 256 KB Output is correct
9 Correct 3 ms 384 KB Output is correct
10 Correct 4 ms 384 KB Output is correct
11 Execution timed out 2036 ms 8192 KB Time limit exceeded
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 3 ms 384 KB Output is correct
4 Correct 3 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 3 ms 384 KB Output is correct
7 Correct 3 ms 384 KB Output is correct
8 Correct 3 ms 256 KB Output is correct
9 Correct 3 ms 384 KB Output is correct
10 Correct 4 ms 384 KB Output is correct
11 Correct 243 ms 4760 KB Output is correct
12 Correct 297 ms 4496 KB Output is correct
13 Correct 323 ms 3960 KB Output is correct
14 Correct 356 ms 4020 KB Output is correct
15 Correct 290 ms 4876 KB Output is correct
16 Correct 372 ms 4600 KB Output is correct
17 Correct 512 ms 6620 KB Output is correct
18 Correct 205 ms 5664 KB Output is correct
19 Correct 226 ms 2720 KB Output is correct
20 Correct 267 ms 4344 KB Output is correct
21 Correct 317 ms 4728 KB Output is correct
22 Incorrect 411 ms 5244 KB Output isn't correct
23 Halted 0 ms 0 KB -