Submission #1050366

#TimeUsernameProblemLanguageResultExecution timeMemory
1050366vjudge1Snake Escaping (JOI18_snake_escaping)C++17
5 / 100
2031 ms27396 KiB
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
string s;
int n, m, q;
map<string, map<int, long long>> mp;
long long b(int p, int l, int r, string s1){
    if(mp[&s[p]][l]==0){
        while(s1[p]!='?'&&p<m){
            if(s1[p]=='0'){
                r=(l+r)/2;
                }else{
                l=(l+r)/2;
            }
            p++;
        }
        if(p==m){
            return s[l]-'0';
        }else{
            long long cnt=b(p+1, l, (r+l)/2, s1)+b(p+1, (r+l)/2, r, s1);
            if(cnt==0){
                mp[&s1[p]][l]=-1;
            }else{
                mp[&s1[p]][l]=cnt;
            }
            return cnt;
        }
    }else{
        return max(mp[&s[p]][l], 0ll);
    }
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >>m >> q;
    n=pow(2, m);
    cin >>s;
    string s1;
    while(q--){
        cin >> s1;
        cout << b(0, 0, n, s1) << "\n";
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...