제출 #1286359

#제출 시각아이디문제언어결과실행 시간메모리
1286359juan_alejandroSnake Escaping (JOI18_snake_escaping)C++20
75 / 100
2094 ms62104 KiB
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#pragma GCC optimize("O2")
using namespace std;
map<string,int> dp;
void backtracking(int num,int i,string &s,string &x,int &res)
{
    if(i==s.size())
    {
        res+=x[num]-'0';
        return;
    }
    if(s[i]!='?')
    {
        num|=(((int)(s[i]=='1'))<<i);
        backtracking(num,i+1,s,x,res);
    }else
    {
        backtracking(num,i+1,s,x,res);
        num|=(1LL<<i);
        backtracking(num,i+1,s,x,res);
    }
}
int32_t main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cout.precision(0);
    cout<<fixed;
    int k,q;
    cin>>k>>q;
    string x;
    cin>>x;
    int n=(1LL<<k)-1;
    while(q--)
    {
        string s;
        cin>>s;
        if(dp[s]!=0){
            cout<<dp[s]<<endl;
            continue;
        }
        reverse(s.begin(),s.end());
        int num=0,res=0;
        backtracking(num,0,s,x,res);
        cout<<res<<endl;
        reverse(s.begin(),s.end());
        dp[s]=res;
    }
    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...