Submission #110090

# Submission time Handle Problem Language Result Execution time Memory
110090 2019-05-09T12:29:58 Z popovicirobert Snake Escaping (JOI18_snake_escaping) C++14
12 / 100
2000 ms 18772 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 {

            int 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 2 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 3 ms 384 KB Output is correct
4 Correct 8 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 4 ms 384 KB Output is correct
7 Correct 9 ms 400 KB Output is correct
8 Correct 2 ms 384 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 2 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 3 ms 384 KB Output is correct
4 Correct 8 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 4 ms 384 KB Output is correct
7 Correct 9 ms 400 KB Output is correct
8 Correct 2 ms 384 KB Output is correct
9 Correct 3 ms 384 KB Output is correct
10 Correct 4 ms 384 KB Output is correct
11 Correct 274 ms 4632 KB Output is correct
12 Correct 334 ms 4344 KB Output is correct
13 Correct 284 ms 3776 KB Output is correct
14 Correct 293 ms 3904 KB Output is correct
15 Correct 261 ms 4768 KB Output is correct
16 Correct 308 ms 4388 KB Output is correct
17 Correct 408 ms 6536 KB Output is correct
18 Correct 224 ms 15992 KB Output is correct
19 Correct 303 ms 13132 KB Output is correct
20 Correct 253 ms 14712 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 3 ms 384 KB Output is correct
4 Correct 8 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 4 ms 384 KB Output is correct
7 Correct 9 ms 400 KB Output is correct
8 Correct 2 ms 384 KB Output is correct
9 Correct 3 ms 384 KB Output is correct
10 Correct 4 ms 384 KB Output is correct
11 Correct 274 ms 4632 KB Output is correct
12 Correct 334 ms 4344 KB Output is correct
13 Correct 284 ms 3776 KB Output is correct
14 Correct 293 ms 3904 KB Output is correct
15 Correct 261 ms 4768 KB Output is correct
16 Correct 308 ms 4388 KB Output is correct
17 Correct 408 ms 6536 KB Output is correct
18 Correct 224 ms 15992 KB Output is correct
19 Correct 303 ms 13132 KB Output is correct
20 Correct 253 ms 14712 KB Output is correct
21 Correct 270 ms 18144 KB Output is correct
22 Incorrect 378 ms 18772 KB Output isn't correct
23 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 3 ms 384 KB Output is correct
4 Correct 8 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 4 ms 384 KB Output is correct
7 Correct 9 ms 400 KB Output is correct
8 Correct 2 ms 384 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 2058 ms 7828 KB Time limit exceeded
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 5 ms 384 KB Output is correct
3 Correct 3 ms 384 KB Output is correct
4 Correct 8 ms 384 KB Output is correct
5 Correct 4 ms 384 KB Output is correct
6 Correct 4 ms 384 KB Output is correct
7 Correct 9 ms 400 KB Output is correct
8 Correct 2 ms 384 KB Output is correct
9 Correct 3 ms 384 KB Output is correct
10 Correct 4 ms 384 KB Output is correct
11 Correct 274 ms 4632 KB Output is correct
12 Correct 334 ms 4344 KB Output is correct
13 Correct 284 ms 3776 KB Output is correct
14 Correct 293 ms 3904 KB Output is correct
15 Correct 261 ms 4768 KB Output is correct
16 Correct 308 ms 4388 KB Output is correct
17 Correct 408 ms 6536 KB Output is correct
18 Correct 224 ms 15992 KB Output is correct
19 Correct 303 ms 13132 KB Output is correct
20 Correct 253 ms 14712 KB Output is correct
21 Correct 270 ms 18144 KB Output is correct
22 Incorrect 378 ms 18772 KB Output isn't correct
23 Halted 0 ms 0 KB -