Pagini recente » Cod sursa (job #1892204) | Cod sursa (job #1481151) | Cod sursa (job #465571) | Cod sursa (job #2553802) | Cod sursa (job #1513696)
#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 Adunare1();
inline bool Imultire();
inline bool Adunare2();
inline bool Adunare1()
{
bool x = Adunare2();
while(*p == '|'){
p++;
x |= Adunare2();
}
return x;
}
inline bool Adunare2()
{
bool x = Imultire();
while(*p == '&'){
p++;
x &= Imultire();
}
return x;
}
inline bool Imultire()
{
bool x = 0;
if(*p == '!')
while(*p == '!'){
p++;
x = !Imultire();
}
else
{
if(*p == '('){
p++;
x = Adunare1();
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 << Adunare1();
}
return 0;
}