제출 #1237569

#제출 시각아이디문제언어결과실행 시간메모리
1237569GeforgsSnake Escaping (JOI18_snake_escaping)C++20
100 / 100
1552 ms33032 KiB
#include <iostream> #include <iomanip> #include <vector> #include <cmath> #include <algorithm> #include <set> #include <queue> #include <map> #include <unordered_map> #include <stack> #include <bitset> #include <string> #include <cstring> #include <iterator> #include <random> #define ll long long #define ld long double #define inf (ll)(2*1e18) #define sort(a) sort(a.begin(), a.end()) #define reverse(a) reverse(a.begin(), a.end()) #define pb push_back #define endl "\n" using namespace std; void solve(){ ll l, q, n, i, j, mask, s1, s2, s3, res=0; char x; cin>>l>>q; n = (1<<l); vector<ll> a(n); vector<ll> b(n); vector<ll> c(n); for(i=0;i<n;++i){ cin>>x; a[i] = x - '0'; b[i] = a[i]; c[(n-1)^i] = a[i]; } for(i=0;i<l;++i){ for(mask=0;mask<n;++mask){ if(mask&(1<<i)){ b[mask] += b[mask^(1<<i)]; c[mask] += c[mask^(1<<i)]; } } } for(i=0;i<q;++i){ s1 = 0; s2 = 0; s3 = n-1; for(j=l-1;j>=0;--j){ cin>>x; if(x == '1'){ s1 += (1<<j); }else if(x == '?'){ s2 += (1<<j); } } s3 -= s1; s3 -= s2; if(s1 == min({s1, s2, s3})){ res = 0; for(mask=s1;mask>0;mask=(mask-1)&s1){ if(__builtin_popcountll(mask^s1)&1){ res -= b[s2|mask]; }else{ res += b[s2|mask]; } } if(__builtin_popcountll(s1)&1){ res -= b[s2]; }else{ res += b[s2]; } cout<<res<<endl; }else if(s2 == min(s2, s3)){ res = 0; for(mask=s2;mask>0;mask=(mask-1)&s2){ res += a[mask|s1]; } res += a[s1]; cout<<res<<endl; }else{ res = 0; for(mask=s3;mask>0;mask=(mask-1)&s3){ if(__builtin_popcountll(mask^s3)&1){ res -= c[s2|mask]; }else{ res += c[s2|mask]; } } if(__builtin_popcountll(s3)&1){ res -= c[s2]; }else{ res += c[s2]; } cout<<res<<endl; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); srand(time(nullptr)); ll t=1; // cin>>t; for(;t>0;--t){ solve(); } 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...