Pagini recente » Cod sursa (job #3190872) | Cod sursa (job #2190356) | Cod sursa (job #1261122) | Cod sursa (job #2328971) | Cod sursa (job #1579401)
#include <fstream>
#include <iostream>
#include <vector>
#include <stack>
#include <cstring>
using namespace std;
const int NMAX=1005;
ifstream f("bool.in");
ofstream g("bool.out");
char s[NMAX];
char vect[NMAX];
int Poz[NMAX],val[NMAX];
stack<int> St;
inline int Solve(int st,int dr)
{
int x=0,sol=0,op=5,schimba=0;
vector <int> v;
for(int i=st;i<=dr;i++)
{
if(s[i]==' ')
continue;
if(s[i]=='(')
{
x=Solve(i+1,Poz[i]-1);
i=Poz[i]+1;
continue;
}
if(s[i]>='A' && s[i]<='Z')
x=val[s[i]-'A'];
else
if(s[i]=='1')
x=1;
else
x=0;
/*if(v.size()==0)
v.push_back(x);*/
if(s[i]!='!')
{
if(s[i]=='&')
{
op=2;
continue;
}
else
if(s[i]=='|')
{
op=3;
continue;
}
if(op==2)
v.back()&=x^schimba;
else
v.push_back(x^schimba);
schimba=0;
}
else
if(s[i]=='!')
schimba^=1;
}
/*if(op==2)
v.back()&=x^schimba;
else
v.push_back(x^schimba);*/
sol=0;
for(int i=0;i<v.size();i++)
{
sol|=v[i];
//g<<v[i]<<" ";
}
return sol;
}
int main()
{
int n;
char ch;
f.getline(s+1,NMAX);
int len=0;
for(int i=1;s[i];i++)
{
if(s[i]==' ')
continue;
if(s[i]=='A' && s[i+1]=='N')
{
s[i]='&';
s[i+1]=' ';
s[i+2]=' ';
i+=3;
}
else
if(s[i]=='O' && s[i+1]=='R')
{
s[i]='|';
s[i+1]=' ';
i+=2;
}
else
if(s[i]=='N' && s[i+1]=='O')
{
s[i]='!';
s[i+1]=' ';
s[i+2]=' ';
i+=3;
}
else
if(s[i]=='T' && s[i+1]=='R')
{
s[i]='1';
s[i+1]=' ';
s[i+2]=' ';
s[i+3]=' ';
i+=4;
}
else
if(s[i]=='F' && s[i+1]=='A')
{
s[i]='0';
s[i+1]=' ';
s[i+2]=' ';
s[i+3]=' ';
s[i+4]=' ';
i+=5;
}
}
for(int i=1;s[i];i++)
{
if(s[i]==' ')
continue;
vect[++len]=s[i];
}
for(int i=1;i<=len;i++)
s[i]=vect[i];
s[len+1]=0;
for(int i=1;s[i];i++)
{
if(s[i]=='(')
St.push(i);
else
if(s[i]==')')
{
Poz[St.top()]=i;
St.pop();
}
}
f>>n;
int na=strlen(s+1);
for(int i=1;i<=n;i++)
{
f>>ch;
val[ch-'A']^=1;
g<<Solve(1,na);
}
//g<<Solve(1,na);
//g<<(s+1)<<"\n";
return 0;
}