Pagini recente » Cod sursa (job #3214919) | Cod sursa (job #364958) | Cod sursa (job #1279781) | Cod sursa (job #1901645) | Cod sursa (job #2956563)
#define _CRT_SECURE_NO_WARNINGS
#include <math.h>
#include <vector>
#include <iomanip>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <stack>
#include <queue>
#include <bitset>
#include <string>
//#include <bits/stdc++.h>
using namespace std;
ifstream cin("bool.in");
ofstream cout("bool.out");
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
const int mod = 1e9 + 7;
const int NMAX = 1e5 + 3;
const double eps = 1e-7;
string s1, s;
bool value[30];
int p;
bool expresie(); // )|( or este un fel de plus dpdv propietate
bool factor(); //not true false
bool termen();
void preprocess()
{
int i = 0;
while (s1[i] != NULL)
{
if (s1[i] == 'T' && s1.substr(i + 1, 3) == "RUE")
{
s.push_back('1');
i += 4;
}
else if (s1[i] == 'F' && s1.substr(i + 1, 4) == "ALSE")
{
s.push_back('0');
i += 5;
}
else if (s1[i] == 'O' and s1[i + 1] == 'R')
{
s.push_back('|');
i += 2;
}
else if (s1[i] == 'A' && s1[i + 1] == 'N' && s1[i + 2] == 'D')
{
s.push_back('&');
i += 3;
}
else if (s1[i] == 'N' && s1[i + 1] == 'O' && s1[i + 2] == 'T')
{
s.push_back('~');
i += 3;
}
else if (s1[i] == '(' || s1[i] == ')')
{
s.push_back(s1[i]);
i++;
}
else if ('A' <= s1[i] and s1[i] <= 'Z')
{
s.push_back(s1[i]);
i++;
}
else
i++;
}
}
void read()
{
getline(cin, s1);
preprocess();
}
bool expresie()
{
bool rez = termen();
while (s[p] == '|')
{
p++;
rez = rez || termen();
}
return rez;
}
bool termen()
{
int val = factor();
while (s[p] == '&')
{
p++;
val = val && factor();
}
return val;
}
bool factor()
{
bool val = 0, semn = 1;
while (s[p] == '~')
{
p++;
semn = !semn;
}
if (s[p] == '(')
{
p++;
val = expresie();
p++;
return semn == 1 ? val : !val; //~1 != 0
}
if (s[p] == '0' || s[p] == '1')
return semn == 1 ? s[p] - '0' : !(s[p] - '0');
return semn == 1 ? value[s[p] - 'A'] : !(value[s[p] - 'A']);
}
void solve()
{
int test;
cin >> test;
char x;
while (test)
{
test--;
cin >> x;
value[x - 'A'] = !(value[x - 'A']);
cout << expresie();
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
read();
solve();
}