Pagini recente » Cod sursa (job #837552) | Cod sursa (job #868555) | Cod sursa (job #855180) | Cod sursa (job #1921785) | Cod sursa (job #1003507)
#include <iostream>
#include <fstream>
using namespace std;
#define MAXS 100010
ifstream f("bool.in");
ofstream g("bool.out");
char s[MAXS], *p = s, a[MAXS];
int n;
bool val[30];
int termen();
int factor();
void space()
{
while (*p == ' ') {
p++;
}
}
int eval()
{
space();
int nr = termen();
space();
while (p[0] == 'O' && p[1] == 'R') {
p += 2;
nr |= termen();
space();
}
return nr;
}
int termen()
{
space();
int nr = factor();
space();
while (p[0] == 'A' && p[1] == 'N') {
p += 3;
nr &= factor();
space();
}
return nr;
}
int factor()
{
int nr = 0;
space();
if (*p == '(') {
p++;
nr = eval();
p++;
} else if (p[0] == 'T' && p[1] == 'R') {
p += 4;
nr = 1;
} else if (p[0] == 'F' && p[1] == 'A') {
p += 5;
nr = 0;
} else if (p[0] == 'N' && p[1] == 'O') {
p += 3;
nr = factor() ^ 1;
} else {
nr = val[*p - 'A' + 1];
p++;
}
space();
return nr;
}
int main()
{
f.getline(s, MAXS);
f >> n;
f.get();
f.getline(a, MAXS);
for(int i = 0; i < n; i++)
{
val[a[i] - 'A' + 1] ^= 1;
p = s;
g << eval();
}
return 0;
}