Cod sursa(job #2469882)
Utilizator | Data | 8 octombrie 2019 10:41:34 | |
---|---|---|---|
Problema | Bool | Scor | 70 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 3.27 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int v[1005],q,n,n1,nr,i,j,val1[1005],poz;
char s[1005],ch;
int eval();
int termen();
int eval()
{
int val=termen();
while (v[poz]==-3||v[poz]==-5)
{
if (v[poz]==-3)
{
val=val&termen();
}
else
{
val=val|termen();
}
poz++;
}
return val;
}
int termen()
{
int val=0,semn;
if (v[poz]==-1)
{
poz++;
val=eval();
poz++;
}
semn=0;
while (v[poz]>0||v[poz]==-4||v[poz]==-6||v[poz]==-7)
{
if (v[poz]==-4)
{
semn=1;
}
else
{
if (v[poz]==-6)
{
val=0;
}
else
if (v[poz]==-7)
{
val=1;
}
else
{
val=val1[v[poz]];
}
break;
}
poz++;
}
if (semn==1)
{
return 1-val;
}
return val;
}
int main()
{
f.getline(s,1005);
f>>n;
n1=strlen(s);
for (j=0;j<n1;j++)
{
if (s[j]=='(')
{
v[++q]=-1;
}
else
if (s[j]==')')
{
v[++q]=-2;
}
else
if ('A'<=s[j]&&s[j]<='Z')
{
if (s[j]=='A')
{
if (s[j+1]=='N'&&s[j+2]=='D')
{
v[++q]=-3;
j=j+2;
}
else
{
v[++q]=1;
}
}
else
if (s[j]=='N')
{
if (s[j+1]=='O'&&s[j+2]=='T')
{
v[++q]=-4;
j=j+2;
}
else
{
v[++q]=s[j]-'A'+1;
}
}
else
if (s[j]=='O')
{
if (s[j+1]=='R')
{
v[++q]=-5;
j=j+1;
}
else
{
v[++q]=s[j]-'A'+1;
}
}
else
if (s[j]=='T')
{
if (s[j+1]=='R')
{
v[++q]=-7;
j=j+3;
}
else
{
v[++q]=s[j]-'A'+1;
}
}
else
if (s[j]=='F')
{
if (s[j+1]=='A')
{
v[++q]=-6;
j=j+3;
}
else
{
v[++q]=s[j]-'A'+1;
}
}
else
{
v[++q]=s[j]-'A'+1;
}
}
}
/*for (i=1;i<=q;i++)
{
g<<v[i]<<" ";
}
g<<'\n';*/
for (i=1;i<=n;i++)
{
f>>ch;
nr=ch-'A'+1;
val1[nr]=1-val1[nr];
poz=1;
g<<eval();
}
return 0;
}