Submission #1213856

#TimeUsernameProblemLanguageResultExecution timeMemory
1213856Hamed_GhaffariSnake Escaping (JOI18_snake_escaping)C++20
100 / 100
494 ms17848 KiB
#include <bits/stdc++.h> using namespace std; #define pop(x) __builtin_popcount(x) const int MXL = 20; int L, Q, sub[1<<MXL], sup[1<<MXL]; string s, t; int32_t main() { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0); cin >> L >> Q >> s; for(int i=0; i<(1<<L); i++) sub[i] = sup[i] = s[i]-'0'; for(int i=0; i<L; i++) for(int j=0; j<(1<<L); j++) if(j>>i&1) sub[j] += sub[j^(1<<i)]; else sup[j] += sup[j^(1<<i)]; while(Q--) { cin >> t; int msk0=0, msk1=0, msk2=0, ans=0; for(int i=0; i<L; i++) if(t[i]=='0') msk0 ^= 1<<(L-1-i); else if(t[i]=='1') msk1 ^= 1<<(L-1-i); else msk2 ^= 1<<(L-1-i); if(pop(msk0)<=L/3) for(int i=msk0; ; i = (i-1)&msk0) { ans += sup[i^msk1]*((pop(i)&1) ? -1 : 1); if(!i) break; } else if(pop(msk1)<=L/3) for(int i=msk1; ; i = (i-1)&msk1) { ans += sub[i^msk2]*(((pop(msk1)-pop(i))&1) ? -1 : 1); if(!i) break; } else for(int i=msk2; ; i = (i-1)&msk2) { ans += s[i^msk1]-'0'; if(!i) break; } cout << ans << '\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...