Pagini recente » Cod sursa (job #944077) | Cod sursa (job #2135849) | Clasament brasov_city_challenge | Cod sursa (job #413530) | Cod sursa (job #1947982)
#include <cstdio>
using namespace std;
int fact ();
int si ();
int sau();
int sauex();
int ec;
char s[1001],a[1001];
int f[30],i;
int sau (){
int r=si ();
while (a[ec]=='|'){
ec++;
r=(r | si ());
}
return r;
}
int si (){
int r=sauex ();
while (a[ec]=='&'){
ec++;
r= (r & sauex());
}
return r;
}
int sauex (){
int r=fact ();
while (a[ec]=='^'){
ec++;
r= (r ^ fact ());
}
return r;
}
int fact (){
int r=0;
if (a[ec]=='('){
ec++;
r=sau ();
ec++;
}
else if (a[ec]=='0' || a[ec]=='1'){
r=a[ec]-'0';
ec++;
}
else if ('A'<=a[ec] && a[ec]<='Z'){
r=f[a[ec]-'A'+1];
ec++;
}
return r;
}
int main()
{
FILE *fin=fopen ("bool.in","r");
FILE *fout=fopen ("bool.out","w");
int c=0,n;
char ch;
fgets (s,1001,fin);
for (i=0;s[i]!=0;i++){
if (s[i]=='A' && s[i+1]=='N'){
a[++c]='&';
i+=2;
}
else if (s[i]=='O' && s[i+1]=='R'){
a[++c]='|';
i++;
}
else if (s[i]=='N' && s[i+1]=='O'){
a[++c]='1';
a[++c]='^';
i+=2;
}
else if (s[i]=='(' || s[i]==')')
a[++c]=s[i];
else if (s[i]=='T' && s[i+1]=='R'){
a[++c]='1';
i+=3;
}
else if (s[i]=='F' && s[i+1]=='A'){
a[++c]=0;
i+=4;
}
else if ('A'<=s[i] && s[i]<='Z')
a[++c]=s[i];
}
fscanf (fin,"%d\n",&n);
for (i=1;i<=n;i++){
ch=fgetc (fin);
f[ch-'A'+1]=1-f[ch-'A'+1];
ec=1;
fprintf (fout,"%d",sau());
}
return 0;
}