답안 #619719

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
619719 2022-08-02T15:05:36 Z Do_you_copy Snake Escaping (JOI18_snake_escaping) C++17
22 / 100
2000 ms 18268 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 (const int &i: C) tem += 1 << i;
            for (int i = 0; i < 1 << x; ++i){
                int t = i & -i;
                if (i != 0)
                val[i] = val[i ^ t] + (1 << A[__lg(t)]);
                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 = 0; i < 1 << y; ++i){
                int t = i & -i;
                if (i != 0)
                val[i] = val[i ^ t] + (1 << B[__lg(t)]);
                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:126:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  126 |         freopen(taskname".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 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 376 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 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 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 376 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 344 KB Output is correct
11 Correct 594 ms 5368 KB Output is correct
12 Correct 612 ms 4976 KB Output is correct
13 Correct 755 ms 4300 KB Output is correct
14 Correct 649 ms 4420 KB Output is correct
15 Correct 552 ms 5448 KB Output is correct
16 Correct 630 ms 4516 KB Output is correct
17 Correct 638 ms 4516 KB Output is correct
18 Correct 392 ms 6348 KB Output is correct
19 Correct 648 ms 3300 KB Output is correct
20 Correct 531 ms 5040 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 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 376 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 344 KB Output is correct
11 Correct 594 ms 5368 KB Output is correct
12 Correct 612 ms 4976 KB Output is correct
13 Correct 755 ms 4300 KB Output is correct
14 Correct 649 ms 4420 KB Output is correct
15 Correct 552 ms 5448 KB Output is correct
16 Correct 630 ms 4516 KB Output is correct
17 Correct 638 ms 4516 KB Output is correct
18 Correct 392 ms 6348 KB Output is correct
19 Correct 648 ms 3300 KB Output is correct
20 Correct 531 ms 5040 KB Output is correct
21 Correct 1263 ms 5464 KB Output is correct
22 Correct 1343 ms 5604 KB Output is correct
23 Correct 1627 ms 4672 KB Output is correct
24 Correct 1437 ms 4544 KB Output is correct
25 Correct 1293 ms 6596 KB Output is correct
26 Correct 1340 ms 5132 KB Output is correct
27 Correct 1492 ms 4976 KB Output is correct
28 Correct 1080 ms 7628 KB Output is correct
29 Correct 1448 ms 3480 KB Output is correct
30 Correct 1244 ms 5656 KB Output is correct
31 Correct 1407 ms 5404 KB Output is correct
32 Correct 1373 ms 5444 KB Output is correct
33 Correct 1287 ms 4340 KB Output is correct
34 Correct 1429 ms 4480 KB Output is correct
35 Correct 1416 ms 5088 KB Output is correct
36 Correct 1033 ms 3200 KB Output is correct
37 Correct 1229 ms 5228 KB Output is correct
38 Correct 1400 ms 3312 KB Output is correct
39 Correct 1339 ms 4452 KB Output is correct
40 Correct 1387 ms 4172 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 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 376 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 344 KB Output is correct
11 Execution timed out 2024 ms 18268 KB Time limit exceeded
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 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 376 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 344 KB Output is correct
11 Correct 594 ms 5368 KB Output is correct
12 Correct 612 ms 4976 KB Output is correct
13 Correct 755 ms 4300 KB Output is correct
14 Correct 649 ms 4420 KB Output is correct
15 Correct 552 ms 5448 KB Output is correct
16 Correct 630 ms 4516 KB Output is correct
17 Correct 638 ms 4516 KB Output is correct
18 Correct 392 ms 6348 KB Output is correct
19 Correct 648 ms 3300 KB Output is correct
20 Correct 531 ms 5040 KB Output is correct
21 Correct 1263 ms 5464 KB Output is correct
22 Correct 1343 ms 5604 KB Output is correct
23 Correct 1627 ms 4672 KB Output is correct
24 Correct 1437 ms 4544 KB Output is correct
25 Correct 1293 ms 6596 KB Output is correct
26 Correct 1340 ms 5132 KB Output is correct
27 Correct 1492 ms 4976 KB Output is correct
28 Correct 1080 ms 7628 KB Output is correct
29 Correct 1448 ms 3480 KB Output is correct
30 Correct 1244 ms 5656 KB Output is correct
31 Correct 1407 ms 5404 KB Output is correct
32 Correct 1373 ms 5444 KB Output is correct
33 Correct 1287 ms 4340 KB Output is correct
34 Correct 1429 ms 4480 KB Output is correct
35 Correct 1416 ms 5088 KB Output is correct
36 Correct 1033 ms 3200 KB Output is correct
37 Correct 1229 ms 5228 KB Output is correct
38 Correct 1400 ms 3312 KB Output is correct
39 Correct 1339 ms 4452 KB Output is correct
40 Correct 1387 ms 4172 KB Output is correct
41 Execution timed out 2024 ms 18268 KB Time limit exceeded
42 Halted 0 ms 0 KB -