Pagini recente » Cod sursa (job #1004841) | Cod sursa (job #1474474) | Cod sursa (job #2526640) | Cod sursa (job #1013088) | Cod sursa (job #2587745)
//ALEXANDRU MICLEA
#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <time.h>
#include <iomanip>
#include <deque>
#include <math.h>
#include <cmath>
#include <assert.h>
#include <stack>
#include <bitset>
#include <random>
#include <chrono>
using namespace std;
//#include <iostream>
#include <fstream>
ifstream fin("bool.in"); ofstream fout("bool.out");
//VARIABLES
string s;
int i, n;
bool val[300];
//FUNCTIONS
bool f1();
bool f2();
bool f3();
bool f4();
bool f1() {
bool ans = f2();
while ((i + 3) < s.size() && s.substr(i, 4) == " OR ") {
i += 4;
ans |= f2();
}
return ans;
}
bool f2() {
bool ans = f3();
while ((i + 4) < s.size() && s.substr(i, 5) == " AND ") {
i += 5;
ans &= f3();
}
return ans;
}
bool f3() {
bool ans = 0;
if ((i + 3) < s.size() && s.substr(i, 4) == "NOT ") {
i += 4;
ans = !f3();
}
else {
ans = f4();
}
return ans;
}
bool f4() {
bool ans = 0;
if (s[i] == '(') {
i++;
ans = f1();
i++;
}
else if ((i + 3) < s.size() && s.substr(i, 4) == "TRUE") {
i += 4;
ans = true;
}
else if ((i + 4) < s.size() && s.substr(i, 5) == "FALSE") {
i += 5;
ans = false;
}
else if ('A' <= s[i] && s[i] <= 'Z') {
ans = val[s[i]];
i++;
}
return ans;
}
//MAIN
int main() {
getline(fin, s);
fin >> n;
for (int j = 1; j <= n; j++) {
i = 0;
char c;
fin >> c;
val[c] = !val[c];
fout << f1();
}
return 0;
}