제출 #651529

#제출 시각아이디문제언어결과실행 시간메모리
651529ymmSnake Escaping (JOI18_snake_escaping)C++17
100 / 100
1539 ms26200 KiB
#include <bits/stdc++.h> #define Loop(x,l,r) for (ll x = (l); x < (ll)(r); ++x) #define LoopR(x,l,r) for (ll x = (r)-1; x >= (ll)(l); --x) typedef long long ll; typedef std::pair<int, int> pii; typedef std::pair<ll , ll > pll; using namespace std; const int L = 20; int sub[1<<L]; int sup[1<<L]; int poi[1<<L]; int sign[1<<L]; int q, l; void sos() { Loop (i,0,1<<l) { sign[i] = __builtin_popcount(i)&1? -1: 0; sub[i] = poi[i]; sup[i] = poi[i]; } for (int i = 1; i < (1<<l); i <<= 1) { Loop (j,0,1<<l) { if (j&i) { sub[j] += sub[j^i]; sup[j^i] += sup[j]; } } } } #define SIGN(x, s) (((x)^(s))-(s)) int main() { cin.tie(0) -> sync_with_stdio(false); string s; cin >> l >> q; cin >> s; Loop (i,0,1<<l) poi[i] = s[i]-'0'; sos(); while (q--) { int cnt[3]={}, msk[3]={}; cin >> s; Loop (i,0,l) { char c = s[l-1-i]; c = c =='?'? 2: c-'0'; cnt[c]++; msk[c] ^= (1<<i); } int ans = 0; if (cnt[2] <= cnt[0] && cnt[2] <= cnt[0]) { int x = msk[2]; Loop (i,0,1<<cnt[2]) { ans += poi[msk[1] ^ x]; x = (x-1) & msk[2]; } } else if (cnt[1] <= cnt[0] && cnt[1] <= cnt[2]) { int x = msk[1]; Loop (i,0,1<<cnt[1]) { ans += SIGN(sub[msk[2]^x], sign[msk[1]^x]); x = (x-1) & msk[1]; } } else { int x = msk[0]; Loop (i,0,1<<cnt[0]) { ans += SIGN(sup[msk[1]^x], sign[x]); x = (x-1) & msk[0]; } } cout << ans << '\n'; } }

컴파일 시 표준 에러 (stderr) 메시지

snake_escaping.cpp: In function 'int main()':
snake_escaping.cpp:50:8: warning: array subscript has type 'char' [-Wchar-subscripts]
   50 |    cnt[c]++;
      |        ^
snake_escaping.cpp:51:8: warning: array subscript has type 'char' [-Wchar-subscripts]
   51 |    msk[c] ^= (1<<i);
      |        ^
#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...