Pagini recente » Cod sursa (job #1052536) | Cod sursa (job #1782766) | Cod sursa (job #1692026) | Cod sursa (job #1207174) | Cod sursa (job #1513359)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("bool.in");
ofstream fout("bool.out");
string s;
string ::iterator p;
bitset < 150 > val;
inline bool Adunare();
inline bool Imultire();
inline bool Adunare()
{
bool x = Imultire();
while(*p == '|' || *p == '&'){
if(*p == '|'){
p++;
x = x | Imultire();
} else {
p++;
x = x & Imultire();
}
}
return x;
}
inline bool Imultire()
{
bool x = 0;
if(*p == '!')
while(*p == '!'){
p++;
x = !Imultire();
}
else
{
if(*p == '('){
p++;
x = Adunare();
p++;
}
if((*p >= 'A' && *p <= 'Z') || *p == 't' || *p == 'f')
x = val[*p],p++;
}
return x;
}
int main()
{
int n;
char x;
getline(fin ,s);
p = s.begin();
for(int i = 0; i < s.size(); i++){
if(s[i] == ' ')
s.erase(s.begin() + i);
if(s[i] == 'A' && s[i+1] == 'N')
s[i] = '&',s.erase(s.begin() + i + 1,s.begin() + i + 3);
if(s[i] == 'N' && s[i+1] == 'O')
s[i] = '!',s.erase(s.begin() + i + 1,s.begin() + i + 3);
if(s[i] == 'O' && s[i+1] == 'R')
s[i] ='|',s.erase(s.begin() + i + 1);
if(s[i] == 'T' && s[i+1] == 'R')
s[i] = 't',s.erase(s.begin() + i + 1,s.begin() + i + 4);
if(s[i] == 'F' && s[i+1] == 'A')
s[i] = 'f',s.erase(s.begin() + i + 1,s.begin() + i + 5);
}
val['t'] = 1;
fin >> n ;
for(int i = 1; i <= n; i++){
fin >> x;
val[x] = !val[x];
p = s.begin();
fout << Adunare();
}
return 0;
}