제출 #1228872

#제출 시각아이디문제언어결과실행 시간메모리
1228872AmaarsaaSnake Escaping (JOI18_snake_escaping)C++20
100 / 100
1913 ms25604 KiB
#include<bits/stdc++.h> using namespace std; using ll = int; const ll N = 1<<20 + 2; const ll LOG = 22; string cost; ll n; vector < int > na, ta; void Solve() { ll ans, s, p, r, i, cnt, j, Neg, Teg; string str; cin >> str; vector < ll > asuult , neg, teg; r = 1<< (n- 1); for (i = 0; i < str.size(); i ++) { if ( str[i] == '?') asuult.push_back(r); if ( str[i] == '0') teg.push_back(r); if ( str[i] == '1') neg.push_back(r); r/= 2; } if ( asuult.size() <= 6) { s =0; for (i =0 ; i < neg.size(); i++) s += neg[i]; ans =0; for ( i = 0; i < (1<<(asuult.size())); i ++) { p =s; for (j =0 ; j< asuult.size(); j ++) { r = i & (1<<j); if ( r != 0) p += asuult[j]; } ans += (cost[p] - '0'); } cout << ans << endl; return ; } if ( neg.size() <= 6) { Neg = neg.size(); s =0; for (i =0 ; i < asuult.size(); i++) s += asuult[i]; ans =0; for (i = 0; i < (1<< Neg); i++){ p = s; cnt =0 ; for (j = 0; j < Neg; j ++) { r = (i) & (1<< j); if ( r != 0) { p = p + neg[j]; } else cnt ++; } if ( cnt % 2 == 0) ans += ta[p]; else ans -= ta[p]; } cout << ans << endl; return ; } if ( teg.size() <= 6) { Teg = teg.size(); s =0; for (i =0 ; i < asuult.size(); i++) s += asuult[i]; ans =0; for (i = 0; i < (1<< Teg); i++){ p = s; cnt =0 ; for (j = 0; j < Teg; j ++) { r = (i) & (1<< j); if ( r != 0) { p = p + teg[j]; } else cnt ++; } if ( cnt % 2 == 0) ans += na[p]; else ans -= na[p]; } cout << ans << endl; return ; } } int main() { ll q, p, r, i, i1, j; cin >> n >> q; cin >> cost; // precomp r = (1<< n); na.resize(r); ta.resize(r); j = 1<< n; for (i =0 ; i < cost.size(); i ++) { j --; ta[i] = cost[i] - '0'; na[j] = cost[i] - '0'; } //na for (j = 1; j <= n; j ++) { for (i = 0; i < r; i ++) { p = i & (1<< (n - j)); if ( p != 0) { i1 = i ^ (1<<(n - j)); na[i] += na[i1]; } } } // ta for (j = 1; j <= n; j ++) { for (i = 0; i < r; i ++) { p = i & (1<< (n - j)); if ( p != 0) { i1 = i ^ (1<<(n - j)); ta[i] += ta[i1]; } } } while (q --) { Solve(); } }
#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...