Cod sursa(job #2292509)
Utilizator | Data | 29 noiembrie 2018 17:31:12 | |
---|---|---|---|
Problema | Bool | Scor | 90 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 2.65 kb |
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int st1[1001],var[100],pr[100];
int n,rez,i,j,k,k1,k2;
char s[1005],st2[1001];
char car;
int op(int K1,int K2)
{
if(st2[K2]=='N')
{
k2--;
return !st1[K1];
}
else if(st2[K2]=='O')
{
k1--;k2--;
return st1[K1]||st1[K1-1];
}
else if(st2[K2]=='A')
{
k1--;k2--;
return st1[K1]&&st1[K1-1];
}
}
int main()
{
pr['O']=1;pr['A']=2;
pr['N']=3;pr['(']=0;
fin.get(s,1001);
fin>>n;
for(i=1;i<=n;i++)
{
k1=k2=0;
fin>>car;
var[car]=!var[car];
memset(st1,0,sizeof(st1));
memset(st2,0,sizeof(st2));
for(j=0;s[j]!=0;j++)
{
if(s[j]>='A'&&s[j]<='Z')
{
k=0;
while(s[j]>='A'&&s[j]<='Z')
{
k++;
j++;
}
if(k==1)
st1[++k1]=var[s[j-1]];
else if(k==4)
st1[++k1]=1;
else if(k==5)
st1[++k1]=0;
else if(s[j-1]=='T')
st2[++k2]='N';
else
{
char x;
if(s[j-1]=='R')
x='O';
else
x='A';
while(k2>0&&pr[st2[k2]]>=pr[x])
{
rez=op(k1,k2);
st1[k1]=rez;
}
st2[++k2]=x;
}
j--;
}
else if(s[j]=='(')
st2[++k2]='(';
else if(s[j]==')')
{
while(st2[k2]!='(')
{
rez=op(k1,k2);
st1[k1]=rez;
}
k2--;
}
}
while(k1>1)
{
rez=op(k1,k2);
st1[k1]=rez;
}
fout<<st1[k1];
}
return 0;
}