Submission #1183905

#TimeUsernameProblemLanguageResultExecution timeMemory
1183905lmaobruhSnake Escaping (JOI18_snake_escaping)C++20
100 / 100
423 ms21968 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define ii pair<int,int>
#define all(x) x.begin(),x.end()
#define fo(i, a, b) for (int i=(a),_b=(int)(b);i<=_b;++i)
#define fd(i, a, b) for (int i=(a),_b=(int)(b);i>=_b;--i)
#define umax(a, b) a=max(a, b)
#define umin(a, b) a=min(a, b)
#define ve vector
#define vi ve<int>
#define vl ve<ll>
#define vvi ve<vi>
#define ar array
#define fi first
#define se second
const int N = 5e6+5;

int L, q, f[N], sos[N], super[N];
string s;

void sol(int tc) {
    cin >> L >> q >> s;
    fo(i,0,(1<<L)-1) {
        f[i] = sos[i] = super[i] = s[i]-'0';
    }
    fo(i,0,L-1) fo(j,0,(1<<L)-1) {
        if (j>>i&1) sos[j] += sos[j^(1<<i)];
        else super[j] += super[j^(1<<i)];
    }
    while (q--) {
        string t; cin >> t; reverse(all(t));
        int p0 = 0, p1 = 0, pm = 0;
        fo(i,0,L-1) {
            if (t[i]=='0') p0 |= (1<<i);
            else if (t[i]=='1') p1 |= (1<<i);
            else pm |= (1<<i);
        }
        int ans = 0;
        if (__builtin_popcount(pm)<=6) {
            for (int x = pm; ; x = (x-1)&pm) {
                ans += f[x|p1];
                if (x==0) break;
            }
        } else if (__builtin_popcount(p0)<=6) {
            for (int x = p0; ; x = (x-1)&p0) {
                ans += (__builtin_parity(x)?1:-1)*super[x|p1];
                if (x==0) break;
            }
        } else {
            for (int x = p1; ; x = (x-1)&p1) {
                ans += (__builtin_parity(x)?1:-1)*sos[x|pm];
                if (x==0) break;
            }
        }
        cout << abs(ans) << '\n';
    }
}

signed main() {
    cin.tie(0) -> sync_with_stdio(0);
    if (fopen("A.inp", "r")) freopen("A.inp", "r", stdin);
    int tc = 1; // cin >> tc;
    fo(i,1,tc) sol(i);
}
 

Compilation message (stderr)

snake_escaping.cpp: In function 'int main()':
snake_escaping.cpp:63:37: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   63 |     if (fopen("A.inp", "r")) freopen("A.inp", "r", stdin);
      |                              ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
#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...