Pagini recente » Cod sursa (job #786721) | Cod sursa (job #120879) | Cod sursa (job #2057337) | Cod sursa (job #828898) | Cod sursa (job #2561192)
#include <fstream>
#include <cstring>
#include <stack>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
struct s
{
int poz;
char semn, semn1;
};
s stiva[501];
int n, lg, nrv, nrs;
char c[1001], x;
bool val[26];
pair < bool, char > v[501];
bool rezolva(int st, int dr)
{
nrv = nrs = 0;
char semn = 0, semn1 = 0;
for (int i = st; i <= dr; i++)
{
if (c[i] >= 'A' && c[i] <= 'Z')
{
if (c[i+1] == ' ' || c[i+1] == 0)
{
/*for (int j=1; j<nrv; j++)
{
g << v[j].first << " ";
if (v[j].second)
g << v[j].second << " ";
else
g << "X ";
}
g << v[nrv].first << " ";
if (semn)
g << semn << " ";
else
g << "X ";
g << val[c[i] - 'A'] << "\n";*/
if (semn == 0)
{
nrv++;
v[nrv].first = val[c[i] - 'A'];
v[nrv].second = semn;
}
else if (semn == '&')
v[nrv].first = (v[nrv].first && val[c[i] - 'A']);
else if (semn == '|')
v[nrv].first = (v[nrv].first || val[c[i] - 'A']);
else if (semn == '!')
{
if (semn1 == '&')
v[nrv].first = (v[nrv].first && !val[c[i] - 'A']);
else if (semn1 == '|')
v[nrv].first = (v[nrv].first || !val[c[i] - 'A']);
}
}
else
{
if (c[i] == 'A')
{
semn1 = semn;
semn = '&';
i += 2;
}
else if (c[i] == 'O')
{
semn1 = semn;
semn = '|';
i += 1;
}
else if (c[i] == 'N')
{
semn1 = semn;
semn = '!';
i += 2;
}
else if (c[i] == 'T')
{
if (semn == 0)
{
nrv++;
v[nrv].first = 1;
v[nrv].second = semn;
}
else if (semn == '&')
v[nrv].first = (v[nrv].first && 1);
else if (semn == '|')
v[nrv].first = (v[nrv].first || 1);
else if (semn == '!')
{
if (semn1 == '&')
v[nrv].first = (v[nrv].first && 0);
else if (semn1 == '|')
v[nrv].first = (v[nrv].first || 0);
}
i += 3;
}
else if (c[i] == 'F')
{
if (semn == 0)
{
nrv++;
v[nrv].first = 0;
v[nrv].second = semn;
}
else if (semn == '&')
v[nrv].first = (v[nrv].first && 0);
else if (semn == '|')
v[nrv].first = (v[nrv].first || 0);
else if (semn == '!')
{
if (semn1 == '&')
v[nrv].first = (v[nrv].first && 1);
else if (semn1 == '|')
v[nrv].first = (v[nrv].first || 1);
}
i += 4;
}
}
}
else if (c[i] == '(')
{
nrs++;
stiva[nrs].poz = nrv + 1;
stiva[nrs].semn = semn;
stiva[nrs].semn1 = semn1;
semn = 0;
}
else if (c[i] == ')')
{
if (stiva[nrs].poz != nrv)
{
if (stiva[nrs].semn == '&')
v[nrv - 1].first = (v[nrv - 1].first && v[nrv].first);
else if (stiva[nrs].semn == '|')
v[nrv - 1].first = (v[nrv - 1].first || v[nrv].first);
else
{
if (stiva[nrs].semn1 == '&')
v[nrv - 1].first = (v[nrv - 1].first && !v[nrv].first);
else if (stiva[nrs].semn1 == '|')
v[nrv - 1].first = (v[nrv - 1].first || !v[nrv].first);
}
nrv--;
}
nrs--;
}
}
for (int i=2; i<=nrv; i++)
if (v[i].second == '&')
v[1].first = (v[1].first && v[i].first);
else if (v[i].second == '|')
v[1].first = (v[1].first || v[i].first);
return v[1].first;
}
int main()
{
f.getline(c, sizeof(c));
lg = strlen(c);
f >> n;
while (n--)
{
f >> x;
val[x - 'A'] = !val[x - 'A'];
g << rezolva(0, lg - 1);
}
return 0;
}