Pagini recente » Rating Oancea David (oanceadavid) | Cod sursa (job #2671206) | Cod sursa (job #2553364) | Cod sursa (job #274670) | Cod sursa (job #1855731)
#include <cstdio>
#include <map>
using namespace std;
FILE *f=fopen("bool.in","r");
FILE *g=fopen("bool.out","w");
map<char,bool> val;
char C[1005];
int ind=1;
int N;
char V[105];
int getnextop()
{
while(C[ind]==' ')
ind++;
if(C[ind]=='O'&&C[ind+1]=='R')
{return 1;}
if(C[ind]=='A'&&C[ind+1]=='N')
{return 2;}
if(C[ind]=='N'&&C[ind+1]=='O')
{return 3;}
return 0;
}
bool legor();
bool legand();
bool getterm()
{
while(C[ind]==' ')
{
ind++;
}
if(C[ind]=='(')
{ind++;return legor();}
if(C[ind]=='F'&&C[ind+1]=='A')
{
ind+=5;
return 0;
}
if(C[ind]=='T'&&C[ind+1]=='R')
{
ind+=4;
return 1;
}
if(C[ind+1]==' '||C[ind+1]==')'||C[ind+1]=='('||C[ind+1]=='\0'||C[ind+1]=='\n')
{
ind+=2;
return val[C[ind-2]];
}
bool tmp=0;
while(getnextop()==3)
{
ind+=3;
tmp^=1;
while(C[ind]==' ')
{
ind++;
}
if(C[ind]=='(')
{ind++;return tmp^legor();}
if(C[ind]=='F'&&C[ind+1]=='A')
{
ind+=5;
return tmp;
}
if(C[ind]=='T'&&C[ind+1]=='R')
{
ind+=4;
return tmp^1;
}
if(C[ind+1]==' '||C[ind+1]==')'||C[ind+1]=='('||C[ind+1]=='\0'||C[ind+1]=='\n')
{
ind+=2;
return tmp^val[C[ind-2]];
}
}
}
bool legand()
{
bool val=getterm();
while(getnextop()==2)
{
ind+=3;
val=val&getterm();
}
return val;
}
bool legor()
{
bool val=legand();
while(getnextop()==1)
{
ind+=2;
val=val|legand();
}
return val;
}
int main()
{
fgets(C+1,1005,f);
fscanf(f,"%d\n",&N);
fgets(V+1,105,f);
for(int i=1;i<=N;i++)
{
val[V[i]]^=1;
ind=1;
fprintf(g,"%d",legor());
}
fclose(f);
fclose(g);
return 0;
}