Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Profil SamurayxJack | Cod sursa (job #2949649) | Cod sursa (job #1796734)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int p, v[30];
string s;
bool solve();
bool fact();
bool term();
bool solve ()
{
while (s[p] == ' ' && p < s.size())
p++;
bool sol = fact();
while (p < s.size() && s[p] == ' ' )
p++;
while (p + 1 < s.size() && s[p] == 'O' && s[p + 1] == 'R')
{
p += 2;
bool x = fact();
sol = sol | x;
}
while (p < s.size() && s[p] == ' ')
p++;
return sol;
}
bool fact ()
{
while (s[p] == ' ' && p < s.size())
p++;
bool sol = term ();
while (p + 2 < s.size() && s[p] == 'A' && s[p + 1] == 'N' && s[p + 2] == 'D')
{
p += 3;
bool x = term();
sol = sol & x;
}
while (p < s.size() && (s[p] == ' '))
p++;
return sol;
}
bool term ()
{
bool x;
while (s[p] == ' ' && p < s.size())
p++;
if (s[p] == '(')
{
p++;
x = solve();
p++;
}
else if (p + 2 < s.size() && s[p] == 'N' && s[p + 1] == 'O' && s[p + 2] == 'T')
{
p += 3;
x = 1 - term ();
}
else if (p + 3 < s.size() && s[p] == 'T' && s[p + 1] == 'R' && s[p + 2] == 'U' && s[p + 3] == 'E')
{
p += 4;
x = 1;
}
else if (p + 4 < s.size() && s[p] == 'F' && s[p + 1] == 'A' && s[p + 2] == 'L' && s[p + 3] == 'S' && s[p + 4] == 'E')
{
p += 5;
x = 0;
}
else
{
x = v[s[p] - 'A'];
p++;
}
while (p < s.size() && (s[p] == ' '))
p++;
return x;
}
int main ()
{
int n;
char c;
ifstream cin ("bool.in");
ofstream cout ("bool.out");
getline(cin,s);
cin >> n;
//cout << s;
for (int i = 1; i <= n; i++)
{
cin >> c;
p = 0;
v[c - 'A'] = 1 - v[c - 'A'];
cout << solve() ;
}
return 0;
}