Pagini recente » Cod sursa (job #627278) | Cod sursa (job #2650734) | Cod sursa (job #1303682) | Cod sursa (job #3125163) | Cod sursa (job #2435125)
#include <bits/stdc++.h>
#define NM 1005
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int i,fr[100];
string s;
int Eval();
int Factori();
void Solve();
int main()
{ Solve();
return 0;
}
void Solve()
{ int n;
char exp[NM];
f.get(exp,NM);
int lg=strlen(exp);
for(int i=0; i<lg;)
{ if((!i && exp[i]>='A' && exp[i]<='Z' && exp[i+1]==' ') || (i==n-1 && exp[i-1]==' ' && exp[i]>='A' && exp[i]<='Z') || ((exp[i-1]==' ' || exp[i-1]=='(') && (exp[i+1]==' ' || exp[i+1]==')') && (exp[i]>='A' && exp[i]<='Z')))
{ exp[i]=exp[i]+32;
i++;
}
else
if(exp[i]=='N' && exp[i+1]=='O')
{ exp[i+3]='-';
exp[i+4]=exp[i+4]+32;
exp[i]=exp[i+1]=exp[i+2]=' ';
i+=5;
}
else
if(exp[i]=='T' && exp[i+1]=='R')
{ exp[i]='1';
exp[i+1]=exp[i+2]=exp[i+3]=' ';
i+=4;
}
else
if(exp[i]=='F' && exp[i+1]=='A')
{ exp[i]='0';
exp[i+1]=exp[i+2]=exp[i+3]=exp[i+4]=' ';
i+=5;
}
else
if(exp[i]=='A' && exp[i+1]=='N')
{ exp[i+1]=exp[i+2]=' ';
i+=3;
}
else
if(exp[i]=='O' && exp[i+1]=='R')
{ exp[i+1]=' ';
i+=2;
}
else i++;
}
char *p=strtok(exp," ");
while(p)
{ s+=p;
p=strtok(NULL," ");
}
string t;
f>>n>>t;
for(int k=0; k<n; k++)
{ fr[int(t[k]+32)]=!fr[int(t[k]+32)];
i=0;
g<<Eval();
}
}
int Eval()
{ int r=Factori();
while(s[i]=='A' || s[i]=='O')
{ if(s[i]=='A')
{ i++;
r*=Factori();
}
else
{ i++;
r+=Factori();
if(r==2) r--;
}
}
return r;
}
int Factori()
{ int r;
if(s[i]=='(')
{ i++;
r=Eval();
i++;
}
else
{ if(s[i]=='-')
{ i++;
r=!fr[int(s[i])];
}
else r=fr[int(s[i])];
i++;
}
return r;
}