Pagini recente » Cod sursa (job #3237865) | Cod sursa (job #1203296) | Cod sursa (job #3245993) | Cod sursa (job #3252323) | Cod sursa (job #2211506)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
string s,s1;
int t[250],n;
void eval()
{
int l=s1.size();
stack<char> ns;
for (int i=0;i<l;i++)
{
if ((s1[i]>='A' && s1[i]<='Z') || (s1[i]>='a' && s1[i]<='b'))
ns.push(s1[i]);
else if (s1[i]=='-')
{
char c=ns.top();
ns.pop();
if (1-t[c]==0) ns.push('a'); else ns.push('b');
}
else
{
char c=ns.top(),c1;
ns.pop();
c1=ns.top();
ns.pop();
if (s1[i]=='*')
{
if (t[c]==0 || t[c1]==0) ns.push('a'); else ns.push('b');
}
else
{
if (t[c]==1 || t[c1]==1) ns.push('b'); else ns.push('a');
}
}
}
fout<<t[ns.top()];
}
int prior (char c)
{
if (c=='-') return 3;
if (c=='*') return 2;
if (c=='/') return 1;
return -1;
}
int main()
{
t['b']=1;
getline(fin,s);
int l=s.size();
stack<char> ss;
ss.push('N');
for (int i=0;i<l;i++)
{
if (s[i]=='A' && s[i+1]=='N')
{
while (prior(ss.top())>=2)
{
s1+=ss.top();
ss.pop();
}
ss.push('*');
i+=2;
}
else if (s[i]=='N' && s[i+1]=='O')
{
while (prior(ss.top())>=3)
{
s1+=ss.top();
ss.pop();
}
ss.push('-');
i+=2;
}
else if (s[i]=='O' && s[i+1]=='R')
{
while (prior(ss.top())>=1)
{
s1+=ss.top();
ss.pop();
}
ss.push('/');
i+=1;
}
else if (s[i]=='(') ss.push('(');
else if (s[i]==')')
{
while (ss.top()!='(' && ss.top()!='N') {s1+=ss.top(); ss.pop();}
if (ss.top()=='(') ss.pop();
}
else if (s[i]=='T' && s[i+1]=='R') {s1+='b'; i+=3;}
else if (s[i]=='F' && s[i+1]=='A') {s1+='a'; i+=4;}
else if (s[i]>='A' && s[i]<='Z')
s1+=s[i];
}
while (ss.top()!='N')
{
s1+=ss.top();
ss.pop();
}
fin>>n;
for (int j=1;j<=n;j++)
{
char c;
fin>>c;
t[c]=1-t[c];
eval();
}
//fout<<s1;
return 0;
}