Submission #68745

#TimeUsernameProblemLanguageResultExecution timeMemory
68745tmwilliamlin168Snake Escaping (JOI18_snake_escaping)C++14
75 / 100
1671 ms66560 KiB
#include <bits/stdc++.h> using namespace std; const int mxL=20, mxQ=1e6; int l, q, dp[2][1<<mxL]; string s; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> l >> q >> s; for(int j=0; j<2; ++j) { for(int i=0; i<1<<l; ++i) dp[j][i]=s[i]-'0'; for(int k=0; k<l; ++k) for(int i=0; i<1<<l; ++i) if(i>>k&1^j) dp[j][i]+=dp[j][i^1<<k]; } while(q--) { string t; cin >> t; int na=0, nb=0, nc=0, ma=0, mb=0, mc=0, ans=0; for(int i=0; i<l; ++i) { if(t[i]=='0') { ++na; ma|=1<<(l-1-i); } else if(t[i]=='1') { ++nb; mb|=1<<(l-1-i); } else { ++nc; mc|=1<<(l-1-i); } } if(na<nc||nb<nc) { bool sw=0; if(nb>na) { swap(nb, na); swap(mb, ma); sw=1; } for(int i=mb; ; i=(i-1)&mb) { ans+=dp[sw][(sw?(1<<l)-1:0)^i^mb^mc]*(__builtin_popcount(i)&1?-1:1); if(!i) break; } } else { for(int i=mc; ; i=(i-1)&mc) { ans+=s[i|mb]-'0'; if(!i) break; } } cout << ans << "\n"; } }

Compilation message (stderr)

snake_escaping.cpp: In function 'int main()':
snake_escaping.cpp:18:12: warning: suggest parentheses around arithmetic in operand of '^' [-Wparentheses]
     if(i>>k&1^j)
        ~~~~^~
#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...