Cod sursa(job #3138226)
Utilizator | Data | 18 iunie 2023 11:00:27 | |
---|---|---|---|
Problema | Bool | Scor | 60 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 4.15 kb |
#include <fstream>
using namespace std;
ifstream fin ("bool.in");
ofstream fout("bool.out");
int n,i,j,pr[250],k1,k2;
char s[1002],c;
int var[1002];
char op[1002];
int main()
{
pr['n']=3;
pr['o']=1;
pr['a']=2;
fin.getline(s,1001);
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';
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';
}
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';
}
else
{
if(s[j]!=' ')
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;
}