Submission #619717

# Submission time Handle Problem Language Result Execution time Memory
619717 2022-08-02T15:02:04 Z Do_you_copy Snake Escaping (JOI18_snake_escaping) C++17
22 / 100
2000 ms 19576 KB
#include <bits/stdc++.h>
#define taskname "test"
#define fi first
#define se second
#define pb push_back
#define faster ios_base::sync_with_stdio(0); cin.tie(0);
using namespace std;
using ll = long long;
using ull = unsigned ll;
using ld = long double;
using pii = pair <int, int>;
using pil = pair <int, ll>;
using pli = pair <ll, int>;
using pll = pair <ll, ll>;
mt19937 Rand(chrono::steady_clock::now().time_since_epoch().count());

ll min(const ll &a, const ll &b){
    return (a < b) ? a : b;
}

ll max(const ll &a, const ll &b){
    return (a > b) ? a : b;
}

//const ll Mod = 1000000007;
//const ll Mod2 = 999999999989;
//only use when required
const int maxN = 20;

int n, q;
string s, t;
int dp[(1 << maxN) + 2];
int f[(1 << maxN) + 2];
int cnt[(1 << maxN) + 2];

void WriteInt(int x)
{
    if (x > 9)
        WriteInt(x / 10);
    putchar(x % 10 + '0');
}

inline int inv(int i){
    return ((1 << n) - 1) ^ i;
}
void Init(){
    cin >> n >> q >> s;
    for (int i = 0; i < int(s.length()); ++i){
        dp[i] = s[i] - '0';
        f[inv(i)] = dp[i];
    }
    for (int i = 0; i < n; ++i){
        for (int j = 1; j < 1 << n; ++j){
            if (j & (1 << i)){
                dp[j] += dp[j ^ (1 << i)];
            }
        }
    }
    for (int i = 0; i < n; ++i){
        for (int j = 0; j < 1 << n; ++j){
            if (j & (1 << i)){
                f[j] += f[j ^ (1 << i)];
            }
        }
    }
    for (int i = 1; i < 1 << n; ++i){
        int j = i & -i;
        cnt[i] = cnt[i ^ j] + 1;
    }
    while (q--){
        cin >> t;
        vector <int> A, B, C;
        vector <int> val((1 << n) + 1, 0);
        for (int i = 0; i < int(t.length()); ++i){
            if (t[i] == '0') A.pb(n - i - 1);
            if (t[i] == '1') B.pb(n - i - 1);
            if (t[i] == '?') C.pb(n - i - 1);
        }
        int x = A.size(), y = B.size(), z = C.size();
        if (x <= 6){
            int tem = 0, ans = 0;
            for (int i: C) tem += 1 << i;
            for (int i = 1; i < 1 << x; ++i){
                int t = i & -i;
                val[i] = val[i ^ t] + (1 << A[__lg(t)]);
            }
            for (int i = 0; i < 1 << x; ++i){
                if ((x & 1) ^ (cnt[i] & 1)) ans -= f[val[i] + tem];
                else ans += f[val[i] + tem];
            }
            WriteInt(ans);
            putchar('\n');
        }
        else if (y <= 6){
            int tem = 0, ans = 0;
            for (int i: C) tem += 1 << i;
            for (int i = 1; i < 1 << y; ++i){
                int t = i & -i;
                val[i] = val[i ^ t] + (1 << B[__lg(t)]);
            }
            for (int i = 0; i < 1 << y; ++i){
                if ((y & 1) ^ (cnt[i] & 1)) ans -= dp[val[i] + tem];
                else ans += dp[val[i] + tem];
            }
            WriteInt(ans);
            putchar('\n');
        }
        else{
            //brute all ?s
            for (int i = 1; i < 1 << z; ++i){
                int t = i & -i;
                val[i] = val[i ^ t] + (1 << C[__lg(t)]);
            }
            int tem = 0, ans = 0;
            for (int i: B) tem += 1 << i;
            for (int i = 0; i < 1 << z; ++i){
                ans += s[val[i] + tem] - '0';
            }
            WriteInt(ans);
            putchar('\n');
        }
    }
}


int main(){
    if (fopen(taskname".inp", "r")){
        freopen(taskname".inp", "r", stdin);
        //freopen(taskname".out", "w", stdout);
    }
    faster;
    ll tt = 1;
    //cin >> tt;
    while (tt--){
        Init();
    }
}

Compilation message

snake_escaping.cpp: In function 'int main()':
snake_escaping.cpp:128:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  128 |         freopen(taskname".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 2 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 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 336 KB Output is correct
3 Correct 2 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 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 565 ms 10120 KB Output is correct
12 Correct 621 ms 9768 KB Output is correct
13 Correct 763 ms 8992 KB Output is correct
14 Correct 645 ms 9084 KB Output is correct
15 Correct 591 ms 10156 KB Output is correct
16 Correct 619 ms 9292 KB Output is correct
17 Correct 677 ms 9296 KB Output is correct
18 Correct 378 ms 11100 KB Output is correct
19 Correct 763 ms 8040 KB Output is correct
20 Correct 528 ms 9716 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 2 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 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 565 ms 10120 KB Output is correct
12 Correct 621 ms 9768 KB Output is correct
13 Correct 763 ms 8992 KB Output is correct
14 Correct 645 ms 9084 KB Output is correct
15 Correct 591 ms 10156 KB Output is correct
16 Correct 619 ms 9292 KB Output is correct
17 Correct 677 ms 9296 KB Output is correct
18 Correct 378 ms 11100 KB Output is correct
19 Correct 763 ms 8040 KB Output is correct
20 Correct 528 ms 9716 KB Output is correct
21 Correct 1295 ms 10248 KB Output is correct
22 Correct 1338 ms 10300 KB Output is correct
23 Correct 1608 ms 9400 KB Output is correct
24 Correct 1438 ms 9212 KB Output is correct
25 Correct 1295 ms 11152 KB Output is correct
26 Correct 1370 ms 9696 KB Output is correct
27 Correct 1443 ms 9780 KB Output is correct
28 Correct 1075 ms 12060 KB Output is correct
29 Correct 1466 ms 8056 KB Output is correct
30 Correct 1281 ms 10292 KB Output is correct
31 Correct 1361 ms 10036 KB Output is correct
32 Correct 1387 ms 10036 KB Output is correct
33 Correct 1272 ms 8868 KB Output is correct
34 Correct 1401 ms 8924 KB Output is correct
35 Correct 1448 ms 9360 KB Output is correct
36 Correct 1022 ms 7488 KB Output is correct
37 Correct 1228 ms 9104 KB Output is correct
38 Correct 1385 ms 6840 KB Output is correct
39 Correct 1341 ms 7820 KB Output is correct
40 Correct 1346 ms 7244 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 2 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 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 Execution timed out 2079 ms 19576 KB Time limit exceeded
12 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 2 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 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 565 ms 10120 KB Output is correct
12 Correct 621 ms 9768 KB Output is correct
13 Correct 763 ms 8992 KB Output is correct
14 Correct 645 ms 9084 KB Output is correct
15 Correct 591 ms 10156 KB Output is correct
16 Correct 619 ms 9292 KB Output is correct
17 Correct 677 ms 9296 KB Output is correct
18 Correct 378 ms 11100 KB Output is correct
19 Correct 763 ms 8040 KB Output is correct
20 Correct 528 ms 9716 KB Output is correct
21 Correct 1295 ms 10248 KB Output is correct
22 Correct 1338 ms 10300 KB Output is correct
23 Correct 1608 ms 9400 KB Output is correct
24 Correct 1438 ms 9212 KB Output is correct
25 Correct 1295 ms 11152 KB Output is correct
26 Correct 1370 ms 9696 KB Output is correct
27 Correct 1443 ms 9780 KB Output is correct
28 Correct 1075 ms 12060 KB Output is correct
29 Correct 1466 ms 8056 KB Output is correct
30 Correct 1281 ms 10292 KB Output is correct
31 Correct 1361 ms 10036 KB Output is correct
32 Correct 1387 ms 10036 KB Output is correct
33 Correct 1272 ms 8868 KB Output is correct
34 Correct 1401 ms 8924 KB Output is correct
35 Correct 1448 ms 9360 KB Output is correct
36 Correct 1022 ms 7488 KB Output is correct
37 Correct 1228 ms 9104 KB Output is correct
38 Correct 1385 ms 6840 KB Output is correct
39 Correct 1341 ms 7820 KB Output is correct
40 Correct 1346 ms 7244 KB Output is correct
41 Execution timed out 2079 ms 19576 KB Time limit exceeded
42 Halted 0 ms 0 KB -