Pagini recente » Cod sursa (job #4932) | Cod sursa (job #2820738) | Cod sursa (job #2285268) | Cod sursa (job #3221598) | Cod sursa (job #2523569)
#include <bits/stdc++.h>
#define ff first
#define ss second
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pi;
typedef pair<ll, ll> pll;
typedef pair<ld, ld> pld;
const string file = "bool";
const ll INF = 9223372036854775807ll;
const int dx[] = {1, -1, 0, 0}, dy[] = {0, 0, 1, -1}, inf = 2147483647;
int val[257], p;
bool check_and(string &s)
{
return p+2 < s.length() && s[p] == 'A' && s[p+1] == 'N' && s[p+2] == 'D';
}
bool check_or(string &s)
{
return p+1 < s.length() && s[p] == 'O' && s[p+1] == 'R';
}
bool and_eval(string&);
bool or_eval(string &s)
{
if (s[p] == ' ')
++p;
bool and_elem = and_eval(s);
while (true){
if (p == s.length())
break;
if (s[p] == ' ')
++p;
if (!check_or(s))
break;
if (p == s.length())
break;
if (s[p] == ' ')
++p;
p += 2;
and_elem |= and_eval(s);
}
return and_elem;
}
bool element(string&);
bool and_eval(string &s)
{
if (s[p] == ' ')
++p;
bool elem = element(s);
while (true){
if (p == s.length())
break;
if (s[p] == ' ')
++p;
if (!check_and(s))
break;
if (p == s.length())
break;
if (s[p] == ' ')
++p;
p += 3;
elem &= element(s);
}
return elem;
}
bool element(string &s)
{
bool ret = false;
if (s[p] == ' ')
++p;
if (p+2 < s.length() && s[p] == 'N' && s[p+1] == 'O' && s[p+2] == 'T'){
p += 3;
ret ^= true;
}
if (s[p] == ' ')
++p;
if (s[p] == '('){
++p;
ret ^= or_eval(s);
++p;
}else if (p+3 < s.length() && s[p] == 'T' && s[p+1] == 'R' && s[p+2] == 'U' && s[p+3] == 'E'){
p += 4;
ret ^= true;
}else if (p+4 < s.length() && s[p] == 'F' && s[p+1] == 'A' && s[p+2] == 'L' && s[p+3] == 'S' && s[p+4] == 'E'){
p += 5;
ret ^= false;
}else if (s[p] >= 'A' && s[p] <= 'Z'){
++p;
ret ^= val[s[p-1]];
}
return ret;
}
int main()
{
ifstream fin (file+".in");
ofstream fout (file+".out");
string s;
getline(fin, s);
int test;
fin >> test;
while(test--){
char q;
fin >> q;
val[q] ^= 1;
p = 0;
fout << or_eval(s);
}
return 0;
}