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