Submission #1158786

#TimeUsernameProblemLanguageResultExecution timeMemory
1158786HakunaSnake Escaping (JOI18_snake_escaping)C++20
75 / 100
2089 ms65292 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 {
            vector<int> nums{0};
            for (int i = 0; i < d.size(); i++) {
                if (d[i] == '?') {
                    int n = nums.size();
                    for (int j = 0; j < n; j++) {
                        nums.emplace_back(nums[j] |
                        (1 << (d.size() - 1 - i)));
                    }
                    
                } else if (d[i] == '1') {
                    for (int j = 0; j < nums.size(); j++) {
                        nums[j] |= 1 << (d.size() - 1 - i);
                    }
                }
            }
            
            long long res = 0;
            for (int i = 0; i < nums.size(); i++) {
                res += s[nums[i]] - '0';
            }
            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...