Pagini recente » Cod sursa (job #831248) | Cod sursa (job #1109942) | Cod sursa (job #1041076) | Cod sursa (job #2715076) | Cod sursa (job #2862953)
#include <bits/stdc++.h>
using namespace std;
int v[30];
string s;
int poz;
int expresie();
int nr() {
int ans = 0;
if (s[poz] == '!') {
ans = 1;
poz++;
}
if (s[poz] == '0' || s[poz] == '1')
ans ^= (s[poz++] - '0');
else if (s[poz] >= 'A' && s[poz] <= 'Z')
ans ^= v[(s[poz++] - 'A')];
return ans;
}
int factor() {
int ans = 0;
if (s[poz] == '!') {
ans = 1;
poz++;
}
if (s[poz] == '(') {
poz++;
ans ^= expresie();
poz++;
}
else
ans ^= nr();
return ans;
}
int termen() {
int ans = factor();
while (poz < s.size() && s[poz] == '&') {
poz++;
ans = (ans & factor());
}
return ans;
}
int expresie() {
bool ans = termen(),semn = 0;
while (poz < s.size() && s[poz] == '|') {
semn = 0;
if (s[poz] == '!')
semn = 1;
poz++;
ans |= (semn ^ factor());
}
return ans;
}
int main()
{
ifstream fin("bool.in");
ofstream fout("bool.out");
int n,ok = 0;
char ch;
fin.get(ch);
while (ch != '\n') {
if (s.size() && ch == 'N' && s[s.size() - 1] == 'A') {
s[s.size() - 1] = '&';
ok = 1;
}
else if (s.size() && ch == 'R' && s[s.size() - 1] == 'O')
s[s.size() - 1] = '|';
else if (s.size() && ch == 'O' && s[s.size() - 1] == 'N') {
s[s.size() - 1] = '!';
ok = 1;
}
else if (s.size() && ch == 'A' && s[s.size() - 1] == 'F') {
s[s.size() - 1] = '0';
ok = 3;
}
else if (s.size() && ch == 'R' && s[s.size() - 1] == 'T') {
s[s.size() - 1] = '1';
ok = 2;
}
else if (!ok && ch != ' ')
s += ch;
else if (ok)
ok--;
fin.get(ch);
}
fin >> n;
for (int i = 0;i < n;i++) {
fin >> ch;
v[ch - 'A'] ^= 1;
poz = 0;
fout << expresie();
}
return 0;
}