Pagini recente » Cod sursa (job #3219322) | Cod sursa (job #517286) | Cod sursa (job #666398) | Cod sursa (job #2627505) | Cod sursa (job #535763)
Cod sursa(job #535763)
#include<cstdio>
#include<string>
const int N=5000;
const int M=100;
char s[N],s1[N],ss[M],sep[]={' '},*p;
bool valoare[M];
int m,poz,n;
bool expresie();
bool termen();
void init()
{
int nr=0;
for (int i=0;s[i];++i)
if (s[i]=='F' && s[i+1]=='A')
s1[nr++]='0',i+=4;
else
if (s[i]=='T' && s[i+1]=='R')
s1[nr++]='1',i+=3;
else
if (s[i]==' ')
{}
else
if (s[i]=='N' && s[i+1]=='O')
s1[nr++]='!',i+=2;
else
if (s[i]=='O' && s[i+1]=='R')
s1[nr++]='|',++i;
else
if (s[i]=='A' && s[i+1]=='N')
s1[nr++]='&',i+=2;
else
s1[nr++]=s[i];
}
void citire()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
gets(s);
scanf("%d\n",&m);
gets(ss);
init();
}
bool termen()
{
bool val;
if (s[poz]=='(')
{
++poz;
val=expresie();
++poz;
return val;
}
bool ok=true;
if (s[poz]=='!')
ok=false,++poz;
if (s[poz]>='A' && s[poz]<='Z')
val=valoare[s[poz]-'A'],++poz;
if (ok)
return val;
else
return !val;
}
bool expresie()
{
bool rez=termen();
while (s[poz]=='|' || s[poz]=='&')
{
if (s[poz]=='|')
++poz,rez=rez||termen();
if (s[poz]=='&')
++poz,rez=rez&&termen();
}
return rez;
}
void afis()
{
poz=0;
bool p=expresie();
if (p)
printf("1");
else
printf("0");
}
void rez()
{
for (int i=0;i<m;++i)
{
valoare[ss[i]-'A']=!valoare[ss[i]-'A'];
afis();
}
}
int main()
{
citire();
rez();
return 0;
}