Submission #1144925

#TimeUsernameProblemLanguageResultExecution timeMemory
1144925Robert_juniorSnake Escaping (JOI18_snake_escaping)C++20
100 / 100
1058 ms26108 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pb push_back #define ins insert #define all(x) x.begin(), x.end() #define F first #define S second const int N = (1<<21); int dp[N], dp1[N]; int a[N]; void solve(){ int L, q; string s; cin>>L>>q>>s; for(int i = 0; i < s.size(); i++){ dp[i] = dp1[(((1<<L) - 1) ^ i)] = s[i] - '0'; } for(int i = 0; i < L; i++){ for(int msk = 0; msk < (1<<L); msk++){ if((msk>>i) & 1){ dp[(msk ^ (1<<i))] += dp[msk]; dp1[(msk ^ (1<<i))] += dp1[msk]; } } } while(q--){ string t; cin>>t; reverse(all(t)); int cnt[3] = {0, 0, 0}; for(auto it : t){ if(it == '?') cnt[2]++; else cnt[it - '0']++; } if(cnt[2] <= 6){ int ans = 0; int msk = 0; vector<int>v; for(int i = 0; i < L; i++){ if(t[i] == '1') msk |= (1<<i) ; else if(t[i] == '?') v.pb(i); } for(int msk1 = 0; msk1 < (1<<v.size()); msk1++){ int msk2 = msk; for(int i = 0; i < v.size(); i++){ if((msk1>>i) & 1){ msk2 |= (1<<v[i]); } } ans += s[msk2] - '0'; } cout<<ans<<'\n'; } else if(cnt[0] <= 6){ int msk = 0; vector<int>v; for(int i = 0; i < L; i++){ if(t[i] == '1') msk |= (1<<i) ; else if(t[i] == '0') v.pb(i); } int ans = 0; for(int msk1 = 0; msk1 < (1<<v.size()); msk1++){ int msk2 = msk; for(int i = 0; i < v.size(); i++){ if((msk1>>i) & 1){ msk2 |= (1<<v[i]); } } if(__builtin_popcount(msk1) % 2 == 1) ans -= dp[msk2]; else ans += dp[msk2]; } cout<<ans<<'\n'; } else{ int msk = 0; vector<int>v; for(int i = 0; i < L; i++){ if(t[i] == '0') msk |= (1<<i) ; else if(t[i] == '1') v.pb(i); } int ans = 0; for(int msk1 = 0; msk1 < (1<<v.size()); msk1++){ int msk2 = msk; for(int i = 0; i < v.size(); i++){ if((msk1>>i) & 1){ msk2 |= (1<<v[i]); } } if(__builtin_popcount(msk1) % 2 == 1) ans -= dp1[msk2]; else ans += dp1[msk2]; } cout<<ans<<'\n'; } } } signed main(){ ios_base :: sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int t = 1; //cin>>t; while(t--){ solve(); } }
#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...