Pagini recente » Cod sursa (job #2818413) | Cod sursa (job #2049509) | Infoarena Monthly 2014, Clasament Runda 2 | Cod sursa (job #839529) | Cod sursa (job #1897177)
#include <fstream>
#include <cstring>
#define nm 1001
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int n,p;
bool alp[30];
char v[nm],x;
string s;
bool solve();
bool termen();
bool fact();
bool fact()
{
bool x;
if(s[p]=='!')
{
p++;
return !fact();
}
else if(s[p]=='1')
{
p++;
return true;
}
else if(s[p]=='0')
{
p++;
return false;
}
else if(s[p]=='(')
{
p++;
x=solve();
p++;
}
else
{
x=alp[s[p]-'A'];
p++;
}
return x;
}
bool termen()
{
bool x=fact();
while(s[p]=='&')
{
p++;
x&=fact();
}
return x;
}
bool solve()
{
bool x=termen();
while(s[p]=='|')
{
p++;
x|=termen();
}
return x;
}
int main()
{
int i,l;
fin.getline(v,nm);
l=strlen(v);
for(i=0; i<l; i++)
{
if(v[i]=='A' && v[i+1]=='N')
s+='&',i+=2;
else if(v[i]=='O' && v[i+1]=='R')
s+='|',i++;
else if(v[i]=='N' && v[i+1]=='O')
s+='!',i+=2;
else if(v[i]=='F' && v[i+1]=='A')
s+='0',i+=4;
else if(v[i]=='T' && v[i+1]=='R')
s+='1',i+=3;
else if(isalpha(v[i]) || v[i]=='(' || v[i]==')')
s+=v[i];
}
fin>>n;
for(i=1; i<=n; i++)
{
fin>>x;
alp[x-'A']=!alp[x-'A'];
p=0;
fout<<solve();
}
fin.close();
fout.close();
return 0;
}