Pagini recente » Cod sursa (job #3197604) | Cod sursa (job #1698094) | Cod sursa (job #207407) | Cod sursa (job #777421) | Cod sursa (job #2320258)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin ("pascal.in");
ofstream cout ("pascal.out");
char s[103];
int v[100];
int p;
int expresie();
int termen();
int factor();
int expresie ()
{
int sum=termen();
while(s[p]=='|')
{
++p;
sum=max(sum,termen());
}
return sum;
}
int termen ()
{
int sum=factor();
while(s[p]=='&')
{
++p;
sum=min(sum,factor());
}
return sum;
}
int factor ()
{
int sum=0,val=0;
while(s[p]=='-')
{
++sum;
++p;
}
if(s[p]=='(')
{
++p;
val=expresie();
++p;
return sum&1;
}
sum+=v[s[p]-'A'];
/* while(s[p]>='0' && s[p]<='9')
{
val=val*10+(s[p]-'0');
++p;
}*/
return sum&1;
}
int main()
{
long long r,i,cur=0,cnt=0,inmul,imp=2,k=-1;
cin.getline(s,100);
int n=strlen(s);
v['Z'-'A'+1]=1;
for(i=0;i<n;++i)
{
if(s[i]=='T' && s[i+1]=='R')
s[++k]='Z'+1;
else
if(s[i]=='F' && s[i+1]=='A')
s[++k]='Z'+2;
else
if(s[i]=='N' && s[i+1]=='O')
s[++k]='-';
else
if(s[i]=='A' && s[i+1]=='N')
s[++k]='&';
else
if(s[i]=='O' && s[i+1]=='R')
s[++k]='|';
else
if((s[i]<'A' || s[i]>'Z') && s[i]!=' ')
s[++k]=s[i];
else
if(s[i]>='A' && s[i]<='Z' && (i==0 || s[i-1]<'A' || s[i-1]>'Z'))
s[++k]=s[i];
}
for(i=k+1;i<n;++i)
s[i]=0;
n=k;
int m;
cin>>m;
for(i=1;i<=m;++i)
{
char c;
cin>>c;
c-='A';
++v[c];
v[c]&=1;
cout<<expresie();
}
}