Submission #110121

#TimeUsernameProblemLanguageResultExecution timeMemory
110121popovicirobertSnake Escaping (JOI18_snake_escaping)C++14
75 / 100
2063 ms21504 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[2][1 << 20]; char str[1 << 20]; vector <int> bit; void bktQ(int p, int cnf, int &ans) { if(p == bit.size()) { ans += str[cnf] - '0'; } else { bktQ(p + 1, cnf, ans); bktQ(p + 1, cnf + (1 << bit[p]), ans); } } void bkt(int p, int cnf, int &ans, int cnt, bool t) { if(p == bit.size()) { if(cnt & 1) { ans -= dp[t][cnf]; } else { ans += dp[t][cnf]; } } else { bkt(p + 1, cnf, ans, cnt, t); bkt(p + 1, cnf ^ (1 << bit[p]), ans, cnt + 1, t); } } 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 >> str; for(int conf = 0; conf < (1 << l); conf++) { dp[0][conf ^ ((1 << l) - 1)] = str[conf] - '0'; dp[1][conf] = str[conf] - '0'; } for(i = 0; i < 2; i++) { for(int bit = 0; bit < l; bit++) { for(int conf = 0; conf < (1 << l); conf++) { if(conf & (1 << bit)) { dp[i][conf] += dp[i][conf ^ (1 << bit)]; } } } } while(q > 0) { q--; string cur; cin >> cur; reverse(cur.begin(), cur.end()); int numq = 0, num0 = 0, num1 = 0; int val = 0; for(i = 0; i < l; i++) { if(cur[i] == '0') { num0++; } if(cur[i] == '1') { num1++; } if(cur[i] == '?') { numq++; } } int mn = min(numq, min(num0, num1)); bit.clear(); int ans = 0, cnf = 0; if(numq == mn) { for(i = 0; i < l; i++) { if(cur[i] == '?') { bit.push_back(i); } else { cnf += (1 << i) * (cur[i] == '1'); } } bktQ(0, cnf, ans); } else if(num0 == mn) { for(i = 0; i < l; i++) { if(cur[i] == '0') { bit.push_back(i); } if(cur[i] != '1') { cnf += (1 << i); } } bkt(0, cnf, ans, 0, 0); } else if(num1 == mn) { for(i = 0; i < l; i++) { if(cur[i] == '1') { bit.push_back(i); } if(cur[i] != '0') { cnf += (1 << i); } } bkt(0, cnf, ans, 0, 1); } cout << ans << "\n"; } //cin.close(); //cout.close(); return 0; }

Compilation message (stderr)

snake_escaping.cpp: In function 'void bktQ(int, int, int&)':
snake_escaping.cpp:15:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(p == bit.size()) {
        ~~^~~~~~~~~~~~~
snake_escaping.cpp: In function 'void bkt(int, int, int&, int, bool)':
snake_escaping.cpp:25:10: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(p == bit.size()) {
        ~~^~~~~~~~~~~~~
snake_escaping.cpp: In function 'int main()':
snake_escaping.cpp:72:13: warning: unused variable 'val' [-Wunused-variable]
         int val = 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...