#include <bits/stdc++.h> #include <iostream> using namespace std; #define mp make_pair #define pb push_back #define ppb pop_back #define eb emplace_back #define e1 first #define e2 second #define For(a, b, i) for(int i=a;i<b; ++i) #define Dfor(a, b, i) for(int i=a;i>=b; --i) typedef long long int ll; typedef unsigned long long int ull; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef pair<pii, pii> pp; const int mod=1e9+7; const int inf=1e9+9; const int mod69=1e9+696969; #define maxn 1000010 char t[maxn]; int n,d[maxn],l,k=0;ll wyn=0; inline int readS(char *a)//funkcja zwraca liczbę znaków { int dl=0; register char c = 0; while (c < 33) c=getchar_unlocked(); dl = 0; //zmienna będzie przechowywać liczbę znaków while (c>=32) { a[dl++] = c; c=getchar_unlocked(); } a[dl]=0; //ustawienie końca ciągu znaków return dl; //zwrócenie liczby znaków } void wczytaj() { scanf("%d", &n); readS(t); l=strlen(t); ///printf("%d\n", l); For(0, l, i) if(t[i]=='(') k++; ///printf("%d\n", k); } void sprawdz() { bool p=false; int q=0; For(0, l, i) { int w=0; if(t[i]=='^' || t[i]==' ') i++; if(t[i]=='(') p=true,i++; else if(t[i]==')') p=false,i++; if(p==true) { ///printf("%d\n", i); int x=i; For(x, l, i) { if(t[i]==')') {p=false;break;} int h=0; if(t[i]=='v') i++; if(t[i]=='~') h++,i++; if(t[i]=='x') { i++; ///printf("%c%c %d\n", t[i-1], t[i], (d[t[i]-'0'-1]+h)%2); if((d[t[i]-'0'-1]+h)%2 == 1) w++; ///if(f==true) break; } ///if(f==true) break; } if(w>=1) q++; } } if(q==k) wyn++; ///if(w==k) For(0, n, i) printf("%d ", d[i]);puts(""); ///printf("%d\n", q); } int main() { wczytaj(); ll r=1<<n; For(0, r, i) { For(0, n, j) { if( (i & (1<<j) ) != 0) d[j]=1; else d[j]=0; } ///For(0, n, j) printf("%d ", d[j]);puts(""); sprawdz(); } printf("%lld", wyn); }
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | #include <bits/stdc++.h> #include <iostream> using namespace std; #define mp make_pair #define pb push_back #define ppb pop_back #define eb emplace_back #define e1 first #define e2 second #define For(a, b, i) for(int i=a;i<b; ++i) #define Dfor(a, b, i) for(int i=a;i>=b; --i) typedef long long int ll; typedef unsigned long long int ull; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef pair<pii, pii> pp; const int mod=1e9+7; const int inf=1e9+9; const int mod69=1e9+696969; #define maxn 1000010 char t[maxn]; int n,d[maxn],l,k=0;ll wyn=0; inline int readS(char *a)//funkcja zwraca liczbę znaków { int dl=0; register char c = 0; while (c < 33) c=getchar_unlocked(); dl = 0; //zmienna będzie przechowywać liczbę znaków while (c>=32) { a[dl++] = c; c=getchar_unlocked(); } a[dl]=0; //ustawienie końca ciągu znaków return dl; //zwrócenie liczby znaków } void wczytaj() { scanf("%d", &n); readS(t); l=strlen(t); ///printf("%d\n", l); For(0, l, i) if(t[i]=='(') k++; ///printf("%d\n", k); } void sprawdz() { bool p=false; int q=0; For(0, l, i) { int w=0; if(t[i]=='^' || t[i]==' ') i++; if(t[i]=='(') p=true,i++; else if(t[i]==')') p=false,i++; if(p==true) { ///printf("%d\n", i); int x=i; For(x, l, i) { if(t[i]==')') {p=false;break;} int h=0; if(t[i]=='v') i++; if(t[i]=='~') h++,i++; if(t[i]=='x') { i++; ///printf("%c%c %d\n", t[i-1], t[i], (d[t[i]-'0'-1]+h)%2); if((d[t[i]-'0'-1]+h)%2 == 1) w++; ///if(f==true) break; } ///if(f==true) break; } if(w>=1) q++; } } if(q==k) wyn++; ///if(w==k) For(0, n, i) printf("%d ", d[i]);puts(""); ///printf("%d\n", q); } int main() { wczytaj(); ll r=1<<n; For(0, r, i) { For(0, n, j) { if( (i & (1<<j) ) != 0) d[j]=1; else d[j]=0; } ///For(0, n, j) printf("%d ", d[j]);puts(""); sprawdz(); } printf("%lld", wyn); } |