Pagini recente » Cod sursa (job #3224650) | Cod sursa (job #3269883) | Cod sursa (job #2961525) | Cod sursa (job #1423432) | Cod sursa (job #2572290)
#include <bits/stdc++.h>
using namespace std;
ifstream f ( "bool.in" );
ofstream g ( "bool.out");
string a,expresie,s;
int p;
int n;
int fr[300];
bool eval();
bool si()
{ bool r,inv=0;
while(expresie[p]=='~')
{ inv=1-inv;
++p;
}
if(expresie[p]=='t')
{
r=1;
++p;
if(inv) return !r;
return r;
}
if( expresie[p]=='f' )
{
r=0;
++p;
if(inv) return !r;
return r;
}
if(expresie[p]=='(')
{
++p;
r=eval();
++p;
if(inv) return !r;
return r;
}
if( 'A'<=expresie[p] and expresie[p]<='Z')
{
r=fr[expresie[p]];
++p;
if(inv) return !r;
return r;
}
}
bool sau()
{
bool r=si();
while(expresie[p]=='&')
{
++p;
r&=si();
}
return r;
}
bool eval()
{
bool r=sau();
while(expresie[p]=='|')
{ ++p;
r|=sau();
}
return r;
}
void form()
{
for(int i=0;i<a.size();i++)
n=n*10+a[i]-'0';
}
int main()
{
while(f>>a)
{ if( '0'<=a[0] and a[0]<='9') break;
s+=a;
}
for(int i=0;i<s.size();i++)
{ if(s[i]==' ') continue;
else if(s[i]=='A' and s[i+1]=='N') expresie+='&',i+=2;
else if(s[i]=='O' and s[i+1]=='R') expresie+='|',i++;
else if(s[i]=='N' and s[i+1]=='O') expresie+='~',i+=2;
else if(s[i]=='T' and s[i+1]=='R') expresie+='t',i+=3;
else if(s[i]=='F' and s[i+1]=='A') expresie+='f',i+=4;
else expresie+=s[i];
}
form();
for(int i=1;i<=n;i++)
{
char x;
f>>x;
fr[x]=!fr[x];
p=0;
g<<eval();
}
return 0;
}