Pagini recente » Cod sursa (job #288467) | Cod sursa (job #2459280) | Cod sursa (job #3225559) | Cod sursa (job #2297662) | Cod sursa (job #3196672)
/// Aceasta sursa este pentru problema
/// https://www.infoarena.ro/problema/bool
/// Punctaj: 100
/// Grupa de seniori - Clasa a X-a
#include <fstream>
#define DIM 1005
using namespace std;
ifstream fin ("bool.in");
ofstream fout("bool.out");
char s[DIM],t[DIM];
char c;
int n,i,j,k;
int f[130];
int expOr();
int expAnd();
int expX();
int factor();
int expOr()
{
int r=expAnd();
while(t[i]=='|')
{
i++;
r=(r|expAnd());
}
return r;
}
int expAnd()
{
int r=expX();
while(t[i]=='&')
{
i++;
r=(r&expX());
}
return r;
}
int expX()
{
int r=factor();
while(t[i]=='^')
{
i++;
r=(r^factor());
}
return r;
}
int factor()
{
int r;
if(t[i]=='(')
{
i++;
r=expOr();
i++;
}
else
{
if(t[i]=='0')
{
i++;
return 0;
}
if(t[i]=='1')
{
i++;
return 1;
}
return f[t[i++]];
}
return r;
}
int main()
{
fin.get(s,DIM);
fin.get();
for(i=0;s[i]!=0;i++)
{
if(s[i]==' ')
continue;
if(s[i]=='('||s[i]==')')
{
t[++k]=s[i];
continue;
}
if(s[i]=='T'&&s[i+1]=='R')
{
t[k++]='1';
i+=3;
continue;
}
if(s[i]=='F'&&s[i+1]=='A')
{
t[k++]='0';
i+=4;
continue;
}
if(s[i]=='O'&&s[i+1]=='R')
{
t[k++]='|';
i++;
continue;
}
if(s[i]=='A'&&s[i+1]=='N')
{
t[k++]='1';
t[k++]='^';
i+=2;
continue;
}
t[k++]=s[i];
}
fin>>n;
for(j=1;j<=n;j++)
{
fin>>c;
f[c]=1-f[c];
i=0;
fout<<expOr();
}
return 0;
}