Pagini recente » Cod sursa (job #2864065) | Cod sursa (job #1746478) | Cod sursa (job #1812910) | Cod sursa (job #1054973) | Cod sursa (job #1161288)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cctype>
using namespace std;
FILE *in,*out;
struct op
{
int pos,pr;
char tip;
};
int n,l,k,nr;
char s[1001];
bool e[510];
bool e2[510];
short a[26][500];
op v[510];
bool cmp(op a, op b)
{
return a.pr>b.pr;
}
void citire()
{
in=fopen("bool.in","r");
fgets(s,1001,in);
fscanf(in,"%d",&n);
l=strlen(s);
}
void expr()
{
int p=0;
int i=0;
int pos=0;
while(i<l)
{
if(isalpha(s[i]))
{
if(isalpha(s[i+1]))
{
if(s[i]=='N')
{
v[++k].pos=pos;
v[k].pr=p+3;
v[k].tip='n';
i+=2;
}
else if(s[i]=='A')
{
v[++k].pos=pos;
v[k].pr=p+2;
v[k].tip='a';
i+=2;
}
else if(s[i]=='O')
{
v[++k].pos=pos;
v[k].pr=p+1;
v[k].tip='o';
i+=2;
}
else if(s[i]=='T')
{
e[++nr]=1;
i+=3;
pos++;
}
else
{
e[++nr]=1;
i+=4;
pos++;
}
}
else
{
e[++nr]=0;
pos++;
a[s[i]-'A'][++a[s[i]-'A'][0]]=pos;
}
}
else
{
if(s[i]=='(')
p+=5;
else if(s[i]==')')
p-=5;
}
i++;
}
sort(v+1,v+k+1,cmp);
}
void rezolva()
{
out=fopen("bool.out","w");
int i,j;
char c;
fscanf(in,"%c",&c);
for(i=1;i<=n;i++)
{
fscanf(in,"%c",&c);
for(j=1;j<=a[c-'A'][0];j++)
e[a[c-'A'][j]]=!e[a[c-'A'][j]];
for(j=1;j<=nr;j++)
e2[j]=e[j];
for(j=1;j<=k;j++)
{
if(v[j].tip=='n')
e2[v[j].pos+1]=!e2[v[j].pos+1];
else if(v[j].tip=='a')
{
e2[v[j].pos]=(e2[v[j].pos]&&e2[v[j].pos+1]);
e2[v[j].pos+1]=e2[v[j].pos];
}
else
{
e2[v[j].pos]=(e2[v[j].pos]||e2[v[j].pos+1]);
e2[v[j].pos+1]=e2[v[j].pos];
}
}
fprintf(out,"%d",e2[v[k].pos+1]);
}
}
int main()
{
citire();
expr();
rezolva();
return 0;
}