#include <cstdio>
#include <vector>
typedef int I;
typedef std::vector<I> VI;
static I bruteforce(const I* v, I n, I kl) {
        if (n > 31)
                return -1; // nie umiem
        I last = 1 << n;
        I ret = 0;
        for (I bits=0; bits<last; ++ bits) {
                bool varok = true;
                for (I k=0; k<kl; ++k) {
                        const I* p = &v[k*(n+1)+1];
                        I nli = p[-1];
                        bool ok = false;
                        for (I li=0; li<nli; ++li) {
                                I val = p[li];
                                if (val > 0) {
                                        if (bits & (1 << (val - 1))) {
                                                ok = true;
                                                break;
                                        }
                                } else {
                                        if (!(bits & (1 << (-val -1)))) {
                                                ok = true;
                                                break;
                                        }
                                }
                        }
                        if (!ok) {
                                varok = false;
                                break;
                        }
                }
                if (varok) {
                        ++ret;
                }
        }
        return ret;
}
int main() {
        I n, row = -1, col=0, x;
        bool neg = false;
        scanf("%d\n", &n);
        VI v;
        for (;;) {
                char c;
                if (scanf("%c", &c) <= 0)
                        break;
                switch(c) {
                case '(':
                        col = 0;
                        ++row;
                        v.resize((n+1)*(row+1));
                        break;
                case ')':
                        v[row*(n+1)] = col;
                        break;
                case '~':
                        neg = true;
                        break;
                case 'x':
                        scanf("%d", &x);
                        if (neg) {
                                x = -x;
                                neg = false;
                        }
                        ++col;
                        v[row*(n+1) + col] = x;
                        break;
                }
        }
        printf("%d\n", bruteforce(&v[0], n, row+1));
        return 0;
}
        | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #include <cstdio> #include <vector> typedef int I; typedef std::vector<I> VI; static I bruteforce(const I* v, I n, I kl) { if (n > 31) return -1; // nie umiem I last = 1 << n; I ret = 0; for (I bits=0; bits<last; ++ bits) { bool varok = true; for (I k=0; k<kl; ++k) { const I* p = &v[k*(n+1)+1]; I nli = p[-1]; bool ok = false; for (I li=0; li<nli; ++li) { I val = p[li]; if (val > 0) { if (bits & (1 << (val - 1))) { ok = true; break; } } else { if (!(bits & (1 << (-val -1)))) { ok = true; break; } } } if (!ok) { varok = false; break; } } if (varok) { ++ret; } } return ret; } int main() { I n, row = -1, col=0, x; bool neg = false; scanf("%d\n", &n); VI v; for (;;) { char c; if (scanf("%c", &c) <= 0) break; switch(c) { case '(': col = 0; ++row; v.resize((n+1)*(row+1)); break; case ')': v[row*(n+1)] = col; break; case '~': neg = true; break; case 'x': scanf("%d", &x); if (neg) { x = -x; neg = false; } ++col; v[row*(n+1) + col] = x; break; } } printf("%d\n", bruteforce(&v[0], n, row+1)); return 0; } | 
 
            
         English
                    English