Pagini recente » Cod sursa (job #57742) | Cod sursa (job #2955989) | Cod sursa (job #1106582) | Cod sursa (job #2610620) | Cod sursa (job #2561347)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
struct stiva
{
int poz;
char semn;
bool NOT;
};
int n, lg;
int p[1001];
char c[1005], lit;
bool val[26];
pair < bool, char > v[500];
stiva s[500];
bool rezolva(char c[])
{
char semn = 0;
bool NOT = false;
int nrv = 0, nrs = 0;
for (int i = 0; c[i]; i++)
if (c[i] >= 'A' && c[i] <= 'Z')
{
if (c[i + 1] == ' ' || c[i + 1] == 0 || c[i + 1] == ')' || c[i] == 'T' || c[i] == 'F')
{
bool x;
if (c[i] == 'T')
{
x = true;
i += 3;
}
else if (c[i] == 'F')
{
x = false;
i += 4;
}
else
x = val[c[i] - 'A'];
if (NOT)
{
x = !x;
NOT = false;
}
if (semn == 0)
{
nrv++;
v[nrv] = make_pair(x, 0);
}
else if (semn == '&')
v[nrv].first = (v[nrv].first && x);
else if (semn == '|')
{
nrv++;
v[nrv] = make_pair(x, '|');
}
}
else if (c[i] == 'A')
{
semn = '&';
i += 2;
}
else if (c[i] == 'O')
{
semn = '|';
i += 1;
}
else if (c[i] == 'N')
{
NOT = true;
i += 2;
}
}
else if (c[i] == '(')
{
nrs++;
s[nrs].poz = nrv + 1;
s[nrs].semn = semn;
if (NOT)
{
s[nrs].NOT = true;
NOT = false;
}
semn = 0;
}
else if (c[i] == ')')
{
for (int j = s[nrs].poz + 1; j <= nrv; j++)
v[s[nrs].poz].first = (v[s[nrs].poz].first || v[j].first);
nrv = s[nrs].poz;
if (s[nrs - 1].poz != nrv)
{
if (s[nrs].semn == '&')
{
v[nrv - 1].first = (v[nrv - 1].first && v[nrv].first);
nrv--;
}
else if (s[nrs].semn == '|')
v[nrv].second = s[nrs].semn;
}
nrs--;
}
for (int i = 2; i <= nrv; i++)
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 >> lit;
val[lit - 'A'] = !val[lit - 'A'];
g << rezolva(c);
}
return 0;
}