Cod sursa(job #2290973)
Utilizator | Data | 27 noiembrie 2018 11:27:22 | |
---|---|---|---|
Problema | Bool | Scor | 20 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 2.79 kb |
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int st1[1000],var[100],pr[100];
int n,rez,i,j,k,k1,k2;
char s[1005],st2[1000];
char car;
int op(int K1,int K2)
{
if(st2[K2]=='N')
{
k2--;
return !st1[K1];
}
else if(st2[K2]=='O')
{
k1--;k2--;
if(st1[K1]||st1[K1-1])
return 1;
return 0;
}
else if(st2[K2]=='A')
{
k1--;k2--;
if(st1[K1]&&st1[K1-1])
return 1;
return 0;
}
}
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]==' ')
continue;
if(s[j]>='A'&&s[j]<='Z')
{
k=0;
while(s[j]>='A'&&s[j]<='Z')
{
k++;
j++;
}
j--;
if(k==1)
st1[++k1]=var[s[j]];
else if(s[j-k+1]=='T')
st1[++k1]=1;
else if(s[j-k+1]=='F')
st1[++k1]=0;
else if(s[j-k+1]=='A')
st2[++k2]='A';
else if(s[j-k+1]=='O')
st2[++k2]='O';
else if(s[j-k+1]=='N')
st2[++k2]='N';
}
else if(s[j]=='(')
st2[++k2]='(';
else if(s[j]==')')
{
while(st2[k2]!='(')
{
rez=op(k1,k2);
st1[k1]=rez;
}
k2--;
}
else
{
while(k2>0&&pr[st2[k2]]>=pr[s[j]])
{
rez=op(k1,k2);
st1[k1]=rez;
}
st2[++k2]=s[j];
}
}
while(k1>1&&k2!=0)
{
rez=op(k1,k2);
st1[k1]=rez;
}
fout<<st1[k1];
}
return 0;
}