#include <cstdio>
#include <vector>
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) FOR(i,0,n)
#define VAR(v,w) __typeof(w) v=(w)
#define FORE(it,c) for(VAR(it,(c).begin());it!=(c).end();++it)
#define PB push_back
#define SIZE(c) ((int)(c).size())
typedef vector<int> VI;
int main() {
int n;
scanf("%d", &n);
char c;
VI clauses, negs;
do {
scanf(" %c", &c);
int clause = 0, neg = 0;
do {
scanf(" %c", &c);
bool isNeg = 0;
if (c == '~') {
isNeg = 1;
scanf("%c", &c);
}
int i;
scanf("%d", &i);
--i;
clause |= 1 << i;
if (isNeg) neg |= 1 << i;
scanf(" %c", &c);
} while (c == 'v');
clauses.PB(clause);
negs.PB(neg);
} while (scanf(" %c", &c) == 1);
int x = clauses.size();
int n2 = 1 << n;
int res = 0;
REP(m,n2) {
bool ok = 1;
REP(i,x) if (!(negs[i] ^ (clauses[i] & m))) {
ok = 0;
break;
}
if (ok) ++res;
}
printf("%d\n", res);
}
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 | #include <cstdio> #include <vector> using namespace std; #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define REP(i,n) FOR(i,0,n) #define VAR(v,w) __typeof(w) v=(w) #define FORE(it,c) for(VAR(it,(c).begin());it!=(c).end();++it) #define PB push_back #define SIZE(c) ((int)(c).size()) typedef vector<int> VI; int main() { int n; scanf("%d", &n); char c; VI clauses, negs; do { scanf(" %c", &c); int clause = 0, neg = 0; do { scanf(" %c", &c); bool isNeg = 0; if (c == '~') { isNeg = 1; scanf("%c", &c); } int i; scanf("%d", &i); --i; clause |= 1 << i; if (isNeg) neg |= 1 << i; scanf(" %c", &c); } while (c == 'v'); clauses.PB(clause); negs.PB(neg); } while (scanf(" %c", &c) == 1); int x = clauses.size(); int n2 = 1 << n; int res = 0; REP(m,n2) { bool ok = 1; REP(i,x) if (!(negs[i] ^ (clauses[i] & m))) { ok = 0; break; } if (ok) ++res; } printf("%d\n", res); } |
English