제출 #1158781

#제출 시각아이디문제언어결과실행 시간메모리
1158781HakunaSnake Escaping (JOI18_snake_escaping)C++20
22 / 100
2095 ms65484 KiB
#include <bits/stdc++.h>
using namespace std;

int l, Q;
string s;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    cin >> l >> Q;
    cin >> s;
    
    unordered_map<string, long long> mp;
    while (Q--) {
        string d;
        cin >> d;
        if (mp.count(d)) cout << mp[d] << '\n';
        else {
            int val = 0;
            vector<int> v;
            for (int i = 0; i < d.size(); i++) {
                if (d[i] == '?') {
                    v.push_back(d.size() - i - 1);
                } else {
                    val |= ((d[i] - '0') << (d.size() - 1 - i));
                }
            }
            int res = 0;
            queue< pair<int, int> > q;
            q.emplace(val, 0);
            while (!q.empty()) {
                auto [num, pos] = q.front();
                q.pop();
                if (pos == v.size()) {
                    res += s[num] - '0';
                    continue;
                }
                
                q.emplace(num | (1 << v[pos]), pos + 1);
                q.emplace(num, pos + 1);
            }
            
            cout << (mp[d] = res) << '\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...