제출 #110089

#제출 시각아이디문제언어결과실행 시간메모리
110089popovicirobertSnake Escaping (JOI18_snake_escaping)C++14
5 / 100
2051 ms15224 KiB
#include <bits/stdc++.h> #define lsb(x) (x & (-x)) #define ll long long #define ull unsigned long long // 217 // 44 using namespace std; int dp[1 << 20]; int main() { //ifstream cin("A.in"); //ofstream cout("A.out"); int i, l, q; ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> l >> q; string str; cin >> str; for(int conf = 0; conf < (1 << l); conf++) { dp[conf] = str[conf] - '0'; } for(int bit = 0; bit < l; bit++) { for(int conf = 0; conf < (1 << l); conf++) { if(conf & (1 << bit)) { dp[conf] += dp[conf ^ (1 << bit)]; } } } while(q > 0) { q--; string cur; cin >> cur; reverse(cur.begin(), cur.end()); int cnf = 0, num = 0; for(i = 0; i < l; i++) { if(cur[i] == '1') { cnf += (1 << i); } if(cur[i] == '?') { num++; } } vector <int> bit; if(num <= 10) { int ans = 0; for(i = 0; i < l; i++) { if(cur[i] == '?') { bit.push_back(i); } } int sz = bit.size(); for(int conf = 0; conf < (1 << sz); conf++) { int aux = cnf; for(i = 0; i < sz; i++) { if(conf & (1 << i)) { aux += (1 << bit[i]); } } ans += str[aux] - '0'; } cout << ans << "\n"; } else { int ans = 0; for(i = 0; i < l; i++) { if(str[i] == '1') { bit.push_back(i); } } int sz = bit.size(); for(int conf = 0; conf < (1 << sz); conf++) { int aux = cnf, cnt = 0; for(i = 0; i < sz; i++) { if(conf & (1 << i)) { aux -= (1 << bit[i]); cnt++; } } if(cnt & 1) { ans -= dp[aux]; } else { ans += dp[aux]; } } cout << ans << "\n"; } } //cin.close(); //cout.close(); 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...