Cod sursa(job #1979928)
Utilizator | Data | 11 mai 2017 18:03:04 | |
---|---|---|---|
Problema | Bool | Scor | 90 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 3.67 kb |
#include <iostream>
#include <cstdio>
using namespace std;
FILE*si=fopen("bool.in","r");
FILE*so=fopen("bool.out","w");
char v[1005];
int val[30];
int lg;
int poz;
inline int calc(int x,int o,int y)
{
switch(o)
{
case 1:return (x==1||y==1);
case 2:return (x==1&&y==1);
}
}
inline int expresie()
{
if(v[poz]=='!')
{
++poz;
return 1-expresie();
}
if(v[poz]=='1')
{
++poz;
return 1;
}
if(v[poz]=='0')
{
++poz;
return 0;
}
if(v[poz]>='A'&&v[poz]<='Z')
{
++poz;
return val[v[poz-1]-'A'];
}
++poz;
int v1,v2,v3,o1,o2;
v1=expresie();
if(v[poz]==')')
{
poz++;
return v1;
}
if(v[poz]=='|')
o1=1;
if(v[poz]=='&')
o1=2;
++poz;
v2=expresie();
while(1)
{
if(v[poz]==')')
{
poz++;
break;
}
if(v[poz]=='|')
o2=1;
if(v[poz]=='&')
o2=2;
++poz;
v3=expresie();
if(o1==2)
{
v1=calc(v1,o1,v2);
v2=v3;
o1=o2;
}
else
{
v2=calc(v2,o2,v3);
}
}
v1=calc(v1,o1,v2);
return v1;
}
int main()
{
fgets(v+1,1005,si);
v[0]='(';
int mut=0;
for(lg=1;v[lg]!='\n'&&v[lg];++lg)
{
if(v[lg]=='A')
{
if(v[lg+1]=='N'&&v[lg+2]=='D')
{
v[lg-mut]='&';
mut+=2;
lg+=2;
}
else
v[lg-mut]='A';
}
else
if(v[lg]=='O')
{
if(v[lg+1]=='R')
{
v[lg-mut]='|';
mut++;
++lg;
}
else
v[lg-mut]='O';
}
else
if(v[lg]=='N')
{
if(v[lg+1]=='O'&&v[lg+2]=='T')
{
v[lg-mut]='!';
mut+=2;
lg+=2;
}
else
v[lg-mut]='N';
}
else
if(v[lg]=='T')
{
if(v[lg+1]=='R'&&v[lg+2]=='U'&&v[lg+3]=='E')
{
v[lg-mut]='1';
mut+=3;
lg+=3;
}
else
v[lg-mut]='T';
}
else
if(v[lg]=='F')
{
if(v[lg+1]=='A'&&v[lg+2]=='L'&&v[lg+3]=='S'&&v[lg+4]=='E')
{
v[lg-mut]='0';
mut+=4;
lg+=4;
}
else
v[lg-mut]='F';
}
else
if(v[lg]==' ')
++mut;
else
v[lg-mut]=v[lg];
}
v[lg-mut]=')';
lg-=mut;
int n;
char a;
fscanf(si,"%i",&n);
a=fgetc(si);
for(int i=1;i<=n;++i)
{
a=fgetc(si);
val[a-'A']=1-val[a-'A'];
poz=0;
fprintf(so,"%i",expresie());
}
return 0;
}