Pagini recente » Cod sursa (job #1392371) | Cod sursa (job #1176616) | Cod sursa (job #1294980) | Cod sursa (job #443883) | Cod sursa (job #2435150)
#include <bits/stdc++.h>
#define NM 1005
using namespace std;
ifstream f("bool.in");
ofstream g("bool.out");
int i,fr[NM];
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==lg-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]='-';
if(exp[i+4]>='A' && exp[i+4]<='Z') 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()
{ if(s[i]=='1' || s[i]=='0') return s[i++]-48;
int r;
bool neg=false;
if(s[i]=='-')
{ i++;
neg=true;
}
if(s[i]=='(')
{ i++;
r=Eval();
if(s[i-2]=='-')
if(!r) r=1;
else r=0;
i++;
}
else
{ r=fr[int(s[i])];
i++;
}
if(neg)
if(!r) r=1;
else r=0;
return r;
}