Pagini recente » Cod sursa (job #96863) | Cod sursa (job #1585451) | Cod sursa (job #1226029) | Cod sursa (job #2859649) | Cod sursa (job #2940128)
#include <bits/stdc++.h>
using namespace std;
///***************************************************
ifstream fin("bool.in");
ofstream fout("bool.out");
///***************************************************
const int NMAX = 1005;
int m, pointer = 0;
char s[NMAX];
bitset <30> logic;
///***************************************************
int expresie();
int AND();
int NOT();
///***************************************************
inline int expresie()
{
int v = AND();
while(s[pointer] == 'O' && s[pointer + 1] == 'R')
{
pointer+=3;
v|=AND();
}
return v;
}
inline int AND()
{
int v = NOT();
while(s[pointer] == 'A' && s[pointer + 1] == 'N' && s[pointer + 2] == 'D')
{
pointer+=4;
v&=NOT();
}
return v;
}
inline int NOT()
{
bool ans;
if(s[pointer] == '(')
pointer++, ans = expresie(), pointer++;
else if(s[pointer] == 'T' && s[pointer + 1] == 'R' && s[pointer + 2] == 'U' && s[pointer + 3] == 'E')
{
pointer+=5;
return 1;
}
else if(s[pointer] == 'F' && s[pointer + 1] == 'A' && s[pointer + 2] == 'L' && s[pointer + 3] == 'S' && s[pointer + 4] == 'E')
{
pointer+=6;
return 0;
}
else if(s[pointer] == 'N' && s[pointer+1] == 'O' && s[pointer+2] == 'T')
{
pointer+=4;
ans=!NOT();
}
else
{
ans = logic[s[pointer] - 'A'];
pointer+=2;
}
return ans;
}
///***************************************************
inline void solve(const char &c)
{
logic[c - 'A'] = !logic[c - 'A'];
fout << expresie();
pointer = 0;
}
///***************************************************
int main()
{
fin.getline(s, NMAX);
fin >> m;
while(m--)
{
char c;
fin >> c;
solve(c);
}
}