Pagini recente » Cod sursa (job #3153500) | Cod sursa (job #2609944) | Cod sursa (job #3245984) | Cod sursa (job #2927990) | Cod sursa (job #84438)
Cod sursa(job #84438)
using namespace std;
#include<fstream>
#include<stdio.h>
int v[1005],m=0;
int vec[35];
int alpha(char x)
{
return ('A'<=x&&x<='Z');
}
int orr(int x,int y)
{
if(x==0&&y==0) return 0;
return 1;
}
int andd(int x,int y)
{
if(x&&y) return 1;
return 0;
}
int nott(int x)
{
if(x) return 0;
return 1;
}
int eval(int li,int lf)
{
if(li==lf)
if(v[li]==27) return 0;
else
if(v[li]==28) return 1;
else return vec[v[li]];
int desc,min,poz = 0,i;
min=100;
desc=0;
for(i=li;i<=lf;i++)
{
if(v[i]==33) desc++;
else
if(v[i]==34) desc--;
else
if(desc==0&&v[i]>=30&&v[i]<=32&&v[i]<=min)
{
min=v[i];
poz=i;
}
}
if(min==100)
return eval(li+1,lf-1);
if(min==30)
return orr(eval(li,poz-1),eval(poz+1,lf));
if(min==31)
return andd(eval(li,poz-1),eval(poz+1,lf));
return nott(eval(poz+1,lf));
}
int main()
{
ifstream fin("bool.in");
ofstream fout("bool.out");
int n=0,i,aux;
char s[1005];
fin.get(s,1005);
for(n=0;;n++)
if(s[n] == 0)
break;
for(i=0;i<n;i++)
if(s[i]!=' ')
{
if(s[i]=='(')
v[++m]=33;
else
if(s[i]==')')
v[++m]=34;
else
{
if(alpha(s[i]))
if(alpha(s[i+1]))
{
if(s[i]=='N')
v[++m]=32,i+=2;
else
if(s[i]=='O')
v[++m]=30,i++;
else
if(s[i]=='A')
v[++m]=31,i+=2;
else
if(s[i]=='T')
v[++m]=28,i+=3;
else
if(s[i]=='F')
v[++m]=27,i+=4;
}
else
v[++m]=s[i]-'A'+1;
}
}
char ch;
for(ch='A';ch<='Z';ch++)
vec[ch-'A'+1]=0;
fin>>n;
char x[1004];
fin>>x;
for(i=0;i<n;i++)
{
aux=x[i]-'A'+1;
if(vec[aux])
vec[aux]=0;
else vec[aux]=1;
fout<<eval(1,m);
}
fout<<"\n";
fin.close();
fout.close();
return 0;
}