Submission #1161304

#TimeUsernameProblemLanguageResultExecution timeMemory
1161304brover29Snake Escaping (JOI18_snake_escaping)C++17
100 / 100
1191 ms17760 KiB
#include <bits/stdc++.h>
//qwerty47924692
using namespace std;
using ll = long long;
const ll N=(1ll<<20);
const string br="617283";
#define sz(a)(ll)a.size()
#define f first
#define s second
ll l,q,dp[N];
string s;
ll calc(ll x){

    return dp[x];
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    cin>>l>>q>>s;
    ll n=(1ll<<l);
    for(ll i=0;i<n;i++)dp[i]=(s[i]-'0');
    for(ll i=0;i<l;i++){
        for(ll mask=0;mask<n;mask++){
            if((mask>>i)&1){
                dp[mask]+=dp[mask-(1ll<<i)];
            }
        }
    }
  //  cout<<dp[0]<<'\n';
    while(q--){
        string a;
        cin>>a;
        ll x=0;
        reverse(a.begin(),a.end());
        ll must=0;
        for(ll i=0;i<a.size();i++){
            if(a[i]=='?')x|=(1ll<<i);
            if(a[i]=='1')must|=(1ll<<i);
        }ll sum=0;
       // cout<<must<<' '<<x<<'\n';
        if(__builtin_popcount(x)<=10){
            for(ll mask=x;mask>=0;mask=((mask-1)&x)){
                sum+=s[mask+must]-'0';
                if(mask==0)break;
            }
        }else{
            for(ll mask=must;mask>=0;mask=((mask-1)&must)){
                sum+=calc(mask+x)*(__builtin_popcount(mask)&1 ? 1 : -1);
                if(mask==0)break;
            }
        }
        cout<<abs(sum)<<'\n';
    }
}
#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...