Submission #1180649

#TimeUsernameProblemLanguageResultExecution timeMemory
1180649miniobSnake Escaping (JOI18_snake_escaping)C++20
100 / 100
1415 ms25932 KiB
#include <bits/stdc++.h> using namespace std; int org[1048583]; int dp[1048583]; int dp2[1048583]; int bity[1048583]; bitset<20> temp; int main() { ios::sync_with_stdio(0); cin.tie(0); int l, q; string s1, s2; cin >> l >> q >> s1; int n = 1 << l; for (int i = 0; i < n; i++) { dp[i] = s1[i] - '0'; org[i] = dp2[i] = dp[i]; } for(int i = 0; i < n; i++) { temp = i; bity[i] = temp.count(); } for (int i = 0; i < l; i++) { for (int j = 0; j < n; j++) { if ((j & (1 << i)) == 0) { dp[j] += dp[j | (1 << i)]; } else { dp2[j] += dp2[j - (1 << i)]; } } } while(q--) { cin >> s2; int jedy = 0, zero = 0, ilez = 0, ileze = 0, ilejed = 0, zapyt = 0; vector<int> zapi; for (int i = 0; i < l; i++) { if (s2[i] == '1') { ilejed++; jedy |= (1 << (l - 1 - i)); } else if (s2[i] == '0') { ileze++; zero |= (1 << (l - 1 - i)); } else { ilez++; zapi.push_back(l - 1 - i); zapyt |= (1 << (l - 1 - i)); } } int odp = 0; if(ileze <= 6) { int cur = zero; while(true) { //cout << cur << endl; if (bity[cur] % 2 == 0) { odp += dp[jedy | cur]; } else { odp -= dp[jedy | cur]; } if (cur == 0) { break; } cur = (cur - 1) & zero; } } else if(ilejed <= 6) { int cur = jedy; while(true) { //cout << cur << endl; if ((bity[jedy] - bity[cur]) % 2 == 0) { odp += dp2[zapyt | cur]; } else { odp -= dp2[zapyt | cur]; } if (cur == 0) { break; } cur = (cur - 1) & jedy; } } else { bitset<6> temp2; for(int i = 0; i < (1 << ilez); i++) { int curr = jedy; temp2 = i; // cout << (i << (6 - ilez)) << endl; for(int j = 0; j < ilez; j++) { //cout << temp2[j] << " "; curr |= (temp2[j] << zapi[j]); } //cout << endl; //cout << curr << endl; odp += org[curr]; } } cout << odp << endl; } 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...