Pagini recente » Cod sursa (job #2270632) | Cod sursa (job #1333197) | Cod sursa (job #1170129) | Cod sursa (job #2105260) | Cod sursa (job #1840658)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("bool.in");
ofstream fout("bool.out");
char c[1010],a[1010],k,d[1010];
int b[1010],vl[260];
int x,y,i,n,j,p;
void tr()
{
int m=b[y-1];
int n=b[y];
switch (a[x])
{
case '!' : { b[y]=!n ; break; }
case '&' : { b[--y]=m&n ; break; }
case '|' : { b[--y]=m|n ; break; }
}
--x;
}
void dcd()
{
++i;
if (c[i]<'A' || c[i]>'Z')
{
b[++y]=vl[c[i-1]];
--i;
}
else if (c[i]=='O')
{
a[++x]='!';
++i;
}
else if (c[i]=='N')
{
if (vl[a[x]] <= vl['&'])
a[++x]='&';
else
{
tr();
a[++x]='&';
}
++i;
}
else if(c[i]=='R')
{
++i;
if (c[i]=='U')
{
b[++y]=1;
i++;
}
else
{
if (vl[a[x]] <= vl['|'])
a[++x]='|';
else
{
tr();
a[++x]='|';
}
--i;
}
}
else
{
b[++y]=0;
i+=3;
}
}
int main()
{
fin.getline (c+1,1010);
n=strlen(c+1);
vl['!']=3; vl['&']=2; vl['|']=1;
fin>>p;
//fin >> k;
fin>>d;
c[0]='('; c[n+1]=')';
if (p==0)
p=1;
for (j=0;j<p;++j)
{
vl[d[j]]=!vl[d[j]];
x=y=0;
for (i=0;i<=n+1; ++i)
{
if (c[i]=='(')
{
a[++x]='(';
}
else
if ( c[i]==')' )
{
while (a[x]!='(')
{
tr();
}
--x;
}
else if (c[i]==' ')
{
;
}
else
{
dcd();
}
}
fout << b[1];
}
return 0;
}