Pagini recente » Cod sursa (job #570972) | Cod sursa (job #2080248) | Cod sursa (job #2840008) | Cod sursa (job #2113428) | Cod sursa (job #2303617)
#include <fstream>
using namespace std;
struct Nod{
char inf;
Nod *st, *dr;
} *rad;
int k, n, pfp[1000], val[26];
char efp[1000];
Nod* arbore(int st, int dr){
int Min, k, i;
Nod *cr= new Nod;
if (st>dr)
return 0;
Min=pfp[dr]; k=dr;
for (i=st; i<=dr; i++)
if (pfp[i]<Min){
Min=pfp[i];
k=i;
}
cr->inf=efp[k];
if (st==dr){
cr->st=0;
cr->dr=0;
}
else{
cr->st=arbore(st, k-1);
cr->dr=arbore(k+1, dr);
}
return cr;
}
bool dfs(Nod *cr){
if (cr->inf>='A' && cr->inf<='Z')
return val[cr->inf-'A'];
if (cr->inf=='t')
return 1;
if (cr->inf=='f')
return 0;
if (cr->inf=='n'){
if (cr->st==0)
return !dfs(cr->dr);
if (cr->dr==0)
return !dfs(cr->st);
}
if (cr->inf=='o')
return dfs(cr->st) || dfs(cr->dr);
return dfs(cr->st) && dfs(cr->dr);
}
int main(){
int i;
char ch;
ifstream fin ("bool.in");
ch=fin.get(); i=0;
while (ch!='\n'){
if (ch=='('){
i+=10;
ch=fin.get();
}
else if (ch==')'){
i-=10;
ch=fin.get();
}
else if (ch==' ')
ch=fin.get();
else{
if (ch=='A'){
ch=fin.get();
if (ch<'A' || ch>'Z'){
efp[n]='A';
pfp[n]=1000+i;
}
else{
fin.get(); ch=fin.get();
efp[n]='a';
pfp[n]=10+i;
}
}
else if (ch=='O'){
ch=fin.get();
if (ch<'A' || ch>'Z'){
efp[n]='O';
pfp[n]=1000+i;
}
else{
ch=fin.get();
efp[n]='o';
pfp[n]=1+i;
}
}
else if (ch=='N'){
ch=fin.get();
if (ch<'A' || ch>'Z'){
efp[n]='N';
pfp[n]=1000+i;
}
else{
fin.get(); ch=fin.get();
efp[n]='n';
pfp[n]=100+i;
}
}
else if (ch=='T'){
ch=fin.get();
if (ch<'A' || ch>'Z'){
efp[n]='T';
pfp[n]=1000+i;
}
else{
fin.get(); fin.get(); ch=fin.get();
efp[n]='1';
pfp[n]=1000+i;
}
}
else if (ch=='F'){
ch=fin.get();
if (ch<'A' || ch>'Z'){
efp[n]='F';
pfp[n]=1000+i;
}
else{
fin.get(); fin.get(); fin.get(); ch=fin.get();
efp[n]='0';
pfp[n]=1000+i;
}
}
else{
efp[n]=ch;
pfp[n]=1000+i;
ch=fin.get();
}
n++;
}
}
rad=arbore(0, n-1);
fin >> k; fin.get();
ofstream fout ("bool.out");
dfs(rad);
for (i=0; i<k; i++){
ch=fin.get();
if (val[ch-'A']==0)
val[ch-'A']=1;
else
val[ch-'A']=0;
fout << dfs(rad);
}
fout.close();
fin.close();
return 0;
}