Pagini recente » Cod sursa (job #2968693) | Cod sursa (job #1680969) | Monitorul de evaluare | Cod sursa (job #1731146) | Cod sursa (job #1162783)
#include<fstream>
#include<string>
#include<vector>
#include<cstring>
#include<algorithm>
#define M -2000000000
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
string s;
char v[10001],c;
int k=0,carac,pr[10001],p,val[10001],n,val2[10001],pr2[10001];
int calc(int a,int b,char c)
{
if(c=='&') return a&&b;
if(c=='|') return a||b;
}
void solve()
{
int l,poz,j,i;
for(i=0;i<=k;i++)
{val2[i]=-1;pr2[i]=M;}
for(l=1;l<=k;l++)
{
if(v[l]==c)val[l]=!val[l];
val2[l]=val[l];
pr2[l]=pr[l];
}
while(1)
{
poz=max_element(pr2+1,pr2+k+1)-pr2;
if(pr2[poz]==M){g<<*max_element(val2+1,val2+k+1);return;}
if(v[poz]=='!')
{
i=poz;
while(val2[i]<0)i++;
val2[poz]=!val2[i];
val2[i]=-1;
pr2[poz]=M;
}
else
{
i=poz;
while(val2[i]<0)i++;
j=poz;
while(val2[j]<0)j--;
val2[poz]=calc(val2[j],val2[i],v[poz]);
val2[i]=-1;
val2[j]=-1;
pr2[poz]=M;
}
}
}
void citire()
{
int i;
getline(f,s);
carac=s.size();
for(i=0;i<=carac;i++)
{val[i]=-1;pr[i]=M;}
for(i=0;i<carac;)
{
if(s[i]==' ')i++;
if(s[i]=='A'&&s[i+1]=='N')
{
++k;
v[k]='&';
pr[k]=p+2;i+=3;
}
if(s[i]=='O'&&s[i+1]=='R')
{
++k;
v[k]='|';
pr[k]=p+1;i+=2;
}
if(s[i]=='N'&&s[i+1]=='O')
{
p++;
++k;
v[k]='!';
pr[k]=p+3;i+=3;
/* if(s[i+1]=='N'&&s[i+2]=='O')
{pr[++k]=p+4;i+=4;}*/
}
if(s[i]=='('){p+=5;i++;}
if(s[i]==')'){p-=5;i++;}
if(s[i]=='T'&&s[i+1]=='R')
{
++k;val[k]=1;i+=4;
}
if(s[i]=='F'&&s[i+1]=='A')
{
++k;val[k]=0;i+=5;
}
if(isalpha(s[i])&&isalpha(s[i+1])==0)
{
++k;v[k]=s[i];
val[k]=0; i++;
}
}
}
int main()
{
int i;
citire();
f>>n;
for(i=1;i<=n;i++)
{
f>>c;
solve();
}
return 0;
}