Submission #399849

# Submission time Handle Problem Language Result Execution time Memory
399849 2021-05-06T18:02:04 Z MarcoMeijer Snake Escaping (JOI18_snake_escaping) C++14
75 / 100
2000 ms 53040 KB
#include <bits/stdc++.h>
using namespace std;
 
// macros
typedef long long ll;
typedef long double ld;
typedef pair<int, int> ii;
typedef pair<ll, ll> lll;
typedef tuple<int, int, int> iii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<iii> viii;
typedef vector<ll> vll;
typedef vector<lll> vlll;
#define REP(a,b,c) for(int a=int(b); a<int(c); a++)
#define RE(a,c) REP(a,0,c)
#define RE1(a,c) REP(a,1,c+1)
#define REI(a,b,c) REP(a,b,c+1)
#define REV(a,b,c) for(int a=int(c-1); a>=int(b); a--)
#define FOR(a,b) for(auto& a : b)
#define all(a) a.begin(), a.end()
#define INF 1e18
#define EPS 1e-9
#define pb push_back
#define popb pop_back
#define fi first
#define se second
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
 
// input
template<class T> void IN(T& x) {cin >> x;}
template<class H, class... T> void IN(H& h, T&... t) {IN(h); IN(t...); }
 
// output
template<class T1, class T2> void OUT(const pair<T1,T2>& x);
template<class T> void OUT(const vector<T>& x);
template<class T> void OUT(const T& x) {cout << x;}
template<class H, class... T> void OUT(const H& h, const T&... t) {OUT(h); OUT(t...); }
template<class T1, class T2> void OUT(const pair<T1,T2>& x) {OUT(x.fi,' ',x.se);}
template<class T> void OUT(const vector<T>& x) {RE(i,x.size()) OUT(i==0?"":" ",x[i]);}
template<class... T> void OUTL(const T&... t) {OUT(t..., "\n"); }
template<class H> void OUTLS(const H& h) {OUTL(h); }
template<class H, class... T> void OUTLS(const H& h, const T&... t) {OUT(h,' '); OUTLS(t...); }
 
// dp
template<class T> bool ckmin(T&a, T&b) { bool bl = a > b; a = min(a,b); return bl;}
template<class T> bool ckmax(T&a, T&b) { bool bl = a < b; a = max(a,b); return bl;}
 
void program();
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    program();
}
 
 
//===================//
//   begin program   //
//===================//
 
const int N = (1<<20);
const int SQ = 8;

int n, l, q;
int a[N];
int nxt1[N], nxt2[N];
int tot[N], ans[N];
string s;
int query0[N], query1[N];
int lst[N];

int stringToInt(string s) {
    int res = 0;
    RE(i,20-SQ) {
        res *= 3;
        if(s[i] == '0') res += 0;
        if(s[i] == '1') res += 1;
        if(s[i] == '?') res += 2;
    }
    return res;
}
string intToString(int x) {
    string res;
    RE(_,20-SQ) {
        if((x%3) == 0) res += '0';
        if((x%3) == 1) res += '1';
        if((x%3) == 2) res += '?';
        x /= 3;
    }
    reverse(all(res));
    return res;
}

void program() {
    // pre calculations
    int ways3 = 1;
    RE(_,20-SQ) ways3 *= 3;
    RE(i,ways3) {
        string t = intToString(i);
        nxt1[i] = -1, nxt2[i] = -1;
        RE(j,20-SQ) if(t[j] == '?') {
            t[j] = '0';
            nxt1[i] = stringToInt(t);
            t[j] = '1';
            nxt2[i] = stringToInt(t);
            break;
        }
        if(nxt1[i] == -1) {
            nxt1[i] = 0;
            RE(j,20-SQ) if(t[19-SQ-j] == '1') nxt1[i] |= (1<<j);
        }
    }

    // input
    IN(l,q,s); n=(1<<l);
    RE(i,n) a[i] = s[i]-'0';
    string u; u.assign(20-l,'0');
    RE(i,q) {
        string t; IN(t);
        t = u + t;
        RE(j,SQ) if(t[SQ-1-j] == '0') query0[i] |= (1<<j);
        RE(j,SQ) if(t[SQ-1-j] == '1') query1[i] |= (1<<j);
        lst[i] = stringToInt(t.substr(SQ,20-SQ));
    }

    RE(i,(1<<SQ)) {
        int bm = (i<<(20-SQ));
        RE(j,ways3) {
            if(nxt2[j] == -1) {
                tot[j] = a[bm|nxt1[j]];
            } else {
                tot[j] = tot[nxt1[j]] + tot[nxt2[j]];
            }
        }
        RE(j,q)
            if((query0[j]&i) == 0 && (query1[j]&(~i)) == 0)
                ans[j] += tot[lst[j]];
    }

    RE(i,q) OUTL(ans[i]);
}
# Verdict Execution time Memory Grader output
1 Correct 276 ms 6760 KB Output is correct
2 Correct 259 ms 6568 KB Output is correct
3 Correct 261 ms 6596 KB Output is correct
4 Correct 261 ms 6580 KB Output is correct
5 Correct 261 ms 6596 KB Output is correct
6 Correct 261 ms 6748 KB Output is correct
7 Correct 262 ms 6524 KB Output is correct
8 Correct 264 ms 6636 KB Output is correct
9 Correct 264 ms 6724 KB Output is correct
10 Correct 259 ms 6632 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 276 ms 6760 KB Output is correct
2 Correct 259 ms 6568 KB Output is correct
3 Correct 261 ms 6596 KB Output is correct
4 Correct 261 ms 6580 KB Output is correct
5 Correct 261 ms 6596 KB Output is correct
6 Correct 261 ms 6748 KB Output is correct
7 Correct 262 ms 6524 KB Output is correct
8 Correct 264 ms 6636 KB Output is correct
9 Correct 264 ms 6724 KB Output is correct
10 Correct 259 ms 6632 KB Output is correct
11 Correct 850 ms 22484 KB Output is correct
12 Correct 819 ms 22448 KB Output is correct
13 Correct 874 ms 21408 KB Output is correct
14 Correct 837 ms 32044 KB Output is correct
15 Correct 837 ms 33116 KB Output is correct
16 Correct 856 ms 32256 KB Output is correct
17 Correct 867 ms 32268 KB Output is correct
18 Correct 826 ms 34100 KB Output is correct
19 Correct 848 ms 31144 KB Output is correct
20 Correct 860 ms 32688 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 276 ms 6760 KB Output is correct
2 Correct 259 ms 6568 KB Output is correct
3 Correct 261 ms 6596 KB Output is correct
4 Correct 261 ms 6580 KB Output is correct
5 Correct 261 ms 6596 KB Output is correct
6 Correct 261 ms 6748 KB Output is correct
7 Correct 262 ms 6524 KB Output is correct
8 Correct 264 ms 6636 KB Output is correct
9 Correct 264 ms 6724 KB Output is correct
10 Correct 259 ms 6632 KB Output is correct
11 Correct 850 ms 22484 KB Output is correct
12 Correct 819 ms 22448 KB Output is correct
13 Correct 874 ms 21408 KB Output is correct
14 Correct 837 ms 32044 KB Output is correct
15 Correct 837 ms 33116 KB Output is correct
16 Correct 856 ms 32256 KB Output is correct
17 Correct 867 ms 32268 KB Output is correct
18 Correct 826 ms 34100 KB Output is correct
19 Correct 848 ms 31144 KB Output is correct
20 Correct 860 ms 32688 KB Output is correct
21 Correct 876 ms 39984 KB Output is correct
22 Correct 832 ms 36272 KB Output is correct
23 Correct 867 ms 39148 KB Output is correct
24 Correct 865 ms 39040 KB Output is correct
25 Correct 862 ms 41072 KB Output is correct
26 Correct 883 ms 39620 KB Output is correct
27 Correct 911 ms 39524 KB Output is correct
28 Correct 829 ms 38168 KB Output is correct
29 Correct 886 ms 38016 KB Output is correct
30 Correct 890 ms 40104 KB Output is correct
31 Correct 855 ms 39972 KB Output is correct
32 Correct 880 ms 40004 KB Output is correct
33 Correct 885 ms 38980 KB Output is correct
34 Correct 904 ms 39064 KB Output is correct
35 Correct 881 ms 39436 KB Output is correct
36 Correct 811 ms 38056 KB Output is correct
37 Correct 845 ms 36064 KB Output is correct
38 Correct 895 ms 37956 KB Output is correct
39 Correct 879 ms 39208 KB Output is correct
40 Correct 877 ms 39060 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 276 ms 6760 KB Output is correct
2 Correct 259 ms 6568 KB Output is correct
3 Correct 261 ms 6596 KB Output is correct
4 Correct 261 ms 6580 KB Output is correct
5 Correct 261 ms 6596 KB Output is correct
6 Correct 261 ms 6748 KB Output is correct
7 Correct 262 ms 6524 KB Output is correct
8 Correct 264 ms 6636 KB Output is correct
9 Correct 264 ms 6724 KB Output is correct
10 Correct 259 ms 6632 KB Output is correct
11 Correct 310 ms 13448 KB Output is correct
12 Correct 315 ms 13508 KB Output is correct
13 Correct 315 ms 13516 KB Output is correct
14 Correct 334 ms 13536 KB Output is correct
15 Correct 376 ms 13628 KB Output is correct
16 Correct 338 ms 13540 KB Output is correct
17 Correct 334 ms 13500 KB Output is correct
18 Correct 295 ms 13360 KB Output is correct
19 Correct 314 ms 13360 KB Output is correct
20 Correct 319 ms 13432 KB Output is correct
21 Correct 353 ms 13536 KB Output is correct
22 Correct 336 ms 13540 KB Output is correct
23 Correct 352 ms 13416 KB Output is correct
24 Correct 336 ms 13596 KB Output is correct
25 Correct 334 ms 13608 KB Output is correct
26 Correct 289 ms 13152 KB Output is correct
27 Correct 309 ms 13412 KB Output is correct
28 Correct 318 ms 13412 KB Output is correct
29 Correct 355 ms 13624 KB Output is correct
30 Correct 327 ms 13540 KB Output is correct
31 Correct 309 ms 13508 KB Output is correct
32 Correct 329 ms 13500 KB Output is correct
33 Correct 340 ms 13508 KB Output is correct
34 Correct 290 ms 13176 KB Output is correct
35 Correct 357 ms 13556 KB Output is correct
36 Correct 355 ms 13544 KB Output is correct
37 Correct 363 ms 13504 KB Output is correct
38 Correct 356 ms 13528 KB Output is correct
39 Correct 365 ms 13504 KB Output is correct
40 Correct 356 ms 13616 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 276 ms 6760 KB Output is correct
2 Correct 259 ms 6568 KB Output is correct
3 Correct 261 ms 6596 KB Output is correct
4 Correct 261 ms 6580 KB Output is correct
5 Correct 261 ms 6596 KB Output is correct
6 Correct 261 ms 6748 KB Output is correct
7 Correct 262 ms 6524 KB Output is correct
8 Correct 264 ms 6636 KB Output is correct
9 Correct 264 ms 6724 KB Output is correct
10 Correct 259 ms 6632 KB Output is correct
11 Correct 850 ms 22484 KB Output is correct
12 Correct 819 ms 22448 KB Output is correct
13 Correct 874 ms 21408 KB Output is correct
14 Correct 837 ms 32044 KB Output is correct
15 Correct 837 ms 33116 KB Output is correct
16 Correct 856 ms 32256 KB Output is correct
17 Correct 867 ms 32268 KB Output is correct
18 Correct 826 ms 34100 KB Output is correct
19 Correct 848 ms 31144 KB Output is correct
20 Correct 860 ms 32688 KB Output is correct
21 Correct 876 ms 39984 KB Output is correct
22 Correct 832 ms 36272 KB Output is correct
23 Correct 867 ms 39148 KB Output is correct
24 Correct 865 ms 39040 KB Output is correct
25 Correct 862 ms 41072 KB Output is correct
26 Correct 883 ms 39620 KB Output is correct
27 Correct 911 ms 39524 KB Output is correct
28 Correct 829 ms 38168 KB Output is correct
29 Correct 886 ms 38016 KB Output is correct
30 Correct 890 ms 40104 KB Output is correct
31 Correct 855 ms 39972 KB Output is correct
32 Correct 880 ms 40004 KB Output is correct
33 Correct 885 ms 38980 KB Output is correct
34 Correct 904 ms 39064 KB Output is correct
35 Correct 881 ms 39436 KB Output is correct
36 Correct 811 ms 38056 KB Output is correct
37 Correct 845 ms 36064 KB Output is correct
38 Correct 895 ms 37956 KB Output is correct
39 Correct 879 ms 39208 KB Output is correct
40 Correct 877 ms 39060 KB Output is correct
41 Correct 310 ms 13448 KB Output is correct
42 Correct 315 ms 13508 KB Output is correct
43 Correct 315 ms 13516 KB Output is correct
44 Correct 334 ms 13536 KB Output is correct
45 Correct 376 ms 13628 KB Output is correct
46 Correct 338 ms 13540 KB Output is correct
47 Correct 334 ms 13500 KB Output is correct
48 Correct 295 ms 13360 KB Output is correct
49 Correct 314 ms 13360 KB Output is correct
50 Correct 319 ms 13432 KB Output is correct
51 Correct 353 ms 13536 KB Output is correct
52 Correct 336 ms 13540 KB Output is correct
53 Correct 352 ms 13416 KB Output is correct
54 Correct 336 ms 13596 KB Output is correct
55 Correct 334 ms 13608 KB Output is correct
56 Correct 289 ms 13152 KB Output is correct
57 Correct 309 ms 13412 KB Output is correct
58 Correct 318 ms 13412 KB Output is correct
59 Correct 355 ms 13624 KB Output is correct
60 Correct 327 ms 13540 KB Output is correct
61 Correct 309 ms 13508 KB Output is correct
62 Correct 329 ms 13500 KB Output is correct
63 Correct 340 ms 13508 KB Output is correct
64 Correct 290 ms 13176 KB Output is correct
65 Correct 357 ms 13556 KB Output is correct
66 Correct 355 ms 13544 KB Output is correct
67 Correct 363 ms 13504 KB Output is correct
68 Correct 356 ms 13528 KB Output is correct
69 Correct 365 ms 13504 KB Output is correct
70 Correct 356 ms 13616 KB Output is correct
71 Correct 1289 ms 50232 KB Output is correct
72 Correct 1276 ms 50384 KB Output is correct
73 Correct 1444 ms 52704 KB Output is correct
74 Correct 1732 ms 53040 KB Output is correct
75 Execution timed out 2024 ms 48992 KB Time limit exceeded
76 Halted 0 ms 0 KB -