Pagini recente » Cod sursa (job #1267968) | Cod sursa (job #1256398) | Cod sursa (job #1828484) | Cod sursa (job #2017081) | Cod sursa (job #1722549)
#include <cstdio>
#include <algorithm>
#define MAX 6000000
#define INF 2000000005
using namespace std;
char f[MAX],C;
int pos=0,Exp[1005]={},P=0,N;
int values[30]={};
void r(int &nr)
{
nr=0;
while(f[pos]<'0'||f[pos]>'9')
pos++;
while(f[pos]>='0'&&f[pos]<='9')
nr=nr*10+f[pos++]-'0';
}
void rch(char &ch)
{
while(f[pos]<'A'||f[pos]>'Z')
{
if(f[pos]=='('||f[pos]==')')
{
ch=f[pos++];
return;
}
pos++;
}
ch=f[pos++];
}
int Analyse (int first,int second,int criteria,int second_sign)
{
if(second_sign==1)
second=!second;
if(criteria==-3)
return first|second;
else return first&second;
}
int Analyse_Expresion(int &val)
{
int NT=0;
int expval=1,comp=-4;
for(int j=val+1;j<=P;j++)
{
if(Exp[j]>0&&Exp[j]<=26)
expval=Analyse(expval,values[Exp[j]],comp,NT),NT=0;
else if(Exp[j]==100)
expval=Analyse(expval,Analyse_Expresion(j),comp,NT),NT=0,val=j;
else if(Exp[j]==-2)
expval=Analyse(expval,1,comp,NT),NT=0;
else if(Exp[j]==-1)
expval=Analyse(expval,0,comp,NT),NT=0;
else if(Exp[j]==-4||Exp[j]==-3)
comp=Exp[j];
else if(Exp[j]==-5)
NT=1;
else if(Exp[j]==-100)
{
val=j;
return expval;
}
}
return expval;
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
fread(f,1,MAX,stdin);
while(f[pos]!='\n')
{
rch(C);
if(C=='(')
Exp[++P]=100;
else if(C==')')
Exp[++P]=-100;
else if(f[pos]==' '||f[pos]==')')
Exp[++P]=C-'A'+1;
else if(f[pos]!=' ')
{
if(C=='F')
Exp[++P]=-1,pos+=3;
else if(C=='T')
Exp[++P]=-2,pos+=3;
else if(C=='O')
Exp[++P]=-3,pos+=1;
else if(C=='A')
Exp[++P]=-4,pos+=2;
else if(C=='N')
Exp[++P]=-5,pos+=2;
}
}
r(N);
for(int i=1;i<=N;i++)
{
int start=0;
rch(C);
values[C-'A'+1]=!values[C-'A'+1];
printf("%d",Analyse_Expresion(start));
}
return 0;
}