Pagini recente » Cod sursa (job #1602668) | Cod sursa (job #2621800) | Cod sursa (job #2078886) | Cod sursa (job #426025) | Cod sursa (job #2540137)
#include <cstdio>
#include <string>
#include <iostream>
#include <cctype>
using namespace std;
const int LMAX = 1000;
int fp[LMAX + 5] , op[LMAX + 5] , v[35];
string s;
int forma_poloneza()
{
int i, top1, top2 , j , pr;
string op_logic;
top1 = top2 = 0;
for(i = 0 ; i < s.length() ; i ++)
{
if(isalpha(s[i]))
op_logic.push_back(s[i]);
if((i > 0 && !isalpha(s[i]) && isalpha(s[i - 1])) || (i == s.length() - 1 && isalpha(s[i])))
{
if(op_logic.length() == 1)
{
fp[++ top1] = v[op_logic[0] - 'A' + 1];
while(top2 > 0 && op[top2] == 3)
{
fp[top1] = !fp[top1];
top2 --;
}
}
else
{
pr = -1;
if(op_logic == "NOT")
pr = 3;
else if(op_logic == "AND")
pr = 2;
else if(op_logic == "OR")
pr = 1;
else if(op_logic == "TRUE")
fp[++ top1] = 1;
else if(op_logic == "FALSE")
fp[++ top1] = 0;
while(pr != -1 && top2 > 0 && pr <= op[top2] && op[top2] != 4)
{
if(op[top2] == 2)
fp[top1 - 1] = (fp[top1 - 1] & fp[top1]);
else
fp[top1 - 1] = (fp[top1 - 1] | fp[top1]);
top1 --;
top2 --;
}
if(pr != -1)
op[++ top2] = pr;
}
op_logic.clear();
}
if(s[i] == '(')
{
op[++ top2] = 4;
}
else if(s[i] == ')')
{
while(top2 > 0 && op[top2] != 4)
{
if(op[top2] == 2)
fp[top1 - 1] = (fp[top1 - 1] & fp[top1]);
else
fp[top1 - 1] = (fp[top1 - 1] | fp[top1]);
top1 --;
top2 --;
}
top2 --;
while(top2 > 0 && op[top2] == 3)
{
fp[top1] = !fp[top1];
top2 --;
}
}
}
while(top2 > 0)
{
if(op[top2] == 2)
fp[top1 - 1] = (fp[top1 - 1] & fp[top1]);
else
fp[top1 - 1] = (fp[top1 - 1] | fp[top1]);
top1 --;
top2 --;
}
return fp[1];
}
int main()
{
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
int n, i , j;
char ch;
getline(cin, s);
scanf("%d\n", &n);
for(i = 1 ; i <= n ; i ++)
{
scanf("%c", &ch);
v[ch - 'A' + 1] = !v[ch - 'A' + 1];
printf("%d", forma_poloneza());
}
return 0;
}