Pagini recente » Borderou de evaluare (job #2678045) | Cod sursa (job #37) | Cod sursa (job #2947176) | Cod sursa (job #1759952) | Cod sursa (job #2643246)
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
using namespace std;
using namespace __gnu_pbds;
typedef tree<
int,
null_type,
less<int>,
rb_tree_tag,
tree_order_statistics_node_update>
ordered_set;
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
ifstream fin("bool.in");
ofstream fout("bool.out");
char v[10001],c;
int n;
int val[10001],lg,stiva[10001],operatii[10001],nt[10001];
int rez()
{
//AND-1,OR-2
int nivel=1;
for(int i=0;i<lg;i++)
{
stiva[i]=0;
operatii[i]=0;
nt[i]=0;
}
for(int i=0;i<lg;i++)
{
if(v[i]==' ')
continue;
if(isupper(v[i])&&(v[i+1]==' '||v[i+1]==')'))
{
int nr=val[v[i]];
if(nt[nivel])
{
if(nr==0)
nr=1;
else
nr=0;
nt[nivel]=0;
}
if(operatii[nivel]==0)
stiva[nivel]=nr;
else
{
if(operatii[nivel]==1)
stiva[nivel]=stiva[nivel]&nr;
else if(operatii[nivel]==2)
stiva[nivel]=stiva[nivel]|nr;
operatii[nivel]=0;
}
continue;
}
if(v[i]=='A'&&v[i+1]=='N'&&v[i+2]=='D')
{
operatii[nivel]=1;
i+=2;
continue;
}
if(v[i]=='O'&&v[i+1]=='R')
{
operatii[nivel]=2;
i++;
continue;
}
if(v[i]=='N'&&v[i+1]=='O'&&v[i+2]=='T')
{
if(nt[nivel]==1)
nt[nivel]=0;
else
nt[nivel]=1;
i+=2;
continue;
}
if(v[i]=='T'&&v[i+1]=='R'&&v[i+2]=='U'&&v[i+3]=='E')
{
int nr=1;
if(nt[nivel]==1)
{
nr=0;
nt[nivel]=0;
}
if(operatii[nivel]==0)
stiva[nivel]=nr;
else
{
if(operatii[nivel]==1)
stiva[nivel]=stiva[nivel]&nr;
else if(operatii[nivel]==2)
stiva[nivel]=stiva[nivel]|nr;
operatii[nivel]=0;
}
i+=3;
continue;
}
if(v[i]=='F'&&v[i+1]=='A'&&v[i+2]=='L'&&v[i+3]=='S'&&v[i+4]=='E')
{
int nr=0;
if(nt[nivel])
{
nr=1;
nt[nivel]=0;
}
if(operatii[nivel]==0)
stiva[nivel]=nr;
else
{
if(operatii[nivel]==1)
stiva[nivel]=stiva[nivel]&nr;
else if(operatii[nivel]==2)
stiva[nivel]=stiva[nivel]|nr;
operatii[nivel]=0;
}
i+=4;
continue;
}
if(v[i]=='(')
nivel++;
if(v[i]==')')
{
int nr=stiva[nivel];
stiva[nivel]=0;
operatii[nivel]=0;
nt[nivel]=0;
nivel--;
if(nt[nivel])
{
if(nr==1)
nr=0;
else
nr=1;
nt[nivel]=0;
}
if(operatii[nivel]==0)
stiva[nivel]=nr;
else
{
if(operatii[nivel]==1)
stiva[nivel]=stiva[nivel]&nr;
else if(operatii[nivel]==2)
stiva[nivel]=stiva[nivel]|nr;
operatii[nivel]=0;
}
}
}
return stiva[1];
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
fin.get(v,10001);
fin.get();
fin>>n;
lg=strlen(v);
for(int i=1;i<=n;i++)
{
fin>>c;
val[c]++;
val[c]%=2;
fout<<rez();
}
return 0;
}