Cod sursa(job #3196673)
Utilizator | Data | 24 ianuarie 2024 16:26:48 | |
---|---|---|---|
Problema | Bool | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 4.65 kb |
/// Aceasta sursa este pentru problema
/// https://www.infoarena.ro/problema/bool
/// Punctaj: 100
/// Grupa de seniori - Clasa a X-a
#include <fstream>
#define DIM 1002
using namespace std;
ifstream fin ("bool.in");
ofstream fout("bool.out");
int n,i,j,pr[DIM/4],k1,k2;
char s[DIM],c;
int var[DIM];
char op[DIM];
int main()
{
pr['n']=3;
pr['o']=1;
pr['a']=2;
fin.getline(s,DIM);
fin>>n;
for(i=1;i<=n;i++)
{
fin>>c;
pr[c]=1-pr[c];
///evaluam expresia
k1=k2=0;
for(j=0;s[j]!=0;j++)
if(s[j]=='(')
op[++k1]='(';
else
if(s[j]==')')
{
while(op[k1]!='(')
{
if(op[k1]=='n')
{
var[k2]=1-var[k2];
k1--;
}
else
if(op[k1]=='a')
{
var[k2-1]=var[k2] && var[k2-1];
k2--;
k1--;
}
else
{
var[k2-1]=var[k2] || var[k2-1];
k2--;
k1--;
}
}
k1--;
}
else
if(s[j]=='N' && s[j+1]=='O')
op[++k1]='n',j+=2;
else
if(s[j]=='A' && s[j+1]=='N')
{
while(k1>0 && pr[op[k1]]>=pr['a'])
{
if(op[k1]=='n')
{
var[k2]=1-var[k2];
k1--;
}
else if(op[k1]=='a')
{
var[k2-1]=var[k2] && var[k2-1];
k2--;
k1--;
}
}
op[++k1]='a';j+=2;
}
else
if(s[j]=='O' && s[j+1]=='R')
{
while(k1>0 && pr[op[k1]]>=pr['o'])
{
if(op[k1]=='n')
{
var[k2]=1-var[k2];
k1--;
}
else
if(op[k1]=='a')
{
var[k2-1]=var[k2] && var[k2-1];
k2--;
k1--;
}
else
{
var[k2-1]=var[k2] || var[k2-1];
k2--;
k1--;
}
}
op[++k1]='o';j++;
}
else
{
if(s[j]!=' ')
if(s[j]=='T'&&s[j+1]=='R')
var[++k2]=1,j+=3;
else
if(s[j]=='F'&& s[j+1]=='A')
var[++k2]=0,j+=4;
else
var[++k2]=pr[s[j]];
}
while(k1>0)
{
if(op[k1]=='n')
{
var[k2]=1-var[k2];
k1--;
}
else if(op[k1]=='a')
{
var[k2-1]=var[k2] && var[k2-1];
k2--;
k1--;
}
else
{
var[k2-1]=var[k2] || var[k2-1];
k2--;
k1--;
}
}
fout<<var[1];
}
return 0;
}