Pagini recente » Cod sursa (job #3234037) | Cod sursa (job #504053) | Cod sursa (job #3288124) | Cod sursa (job #825034) | Cod sursa (job #2956529)
#include <bits/stdc++.h>
#pragma GCC optimize ("O3")
using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
const int MAX_SIZE = 1000;
char input[MAX_SIZE + 10];
string original, aux, eval, changes;
int poz, lim, q;
map <char, bool> turn;
bool expresie();
bool factor(){
bool answer;
if(eval[poz] == '!'){
poz++; ///sar peste !
answer = (!expresie());
}else if(eval[poz] == '('){
poz++; ///sar peste (
answer = expresie();
poz++; ///sar peste )
}else{
if(eval[poz] == '0')
answer = false;
else
answer = true;
}
return answer;
}
bool termen(){
bool answer = factor();
while(poz < lim && eval[poz] == '*'){
poz++; ///sar peste *
answer &= factor();
}
return answer;
}
bool expresie(){
bool answer = termen();
while(poz < lim && eval[poz] == '+'){
poz++; ///sar peste +
answer |= termen();
}
return answer;
}
int main(){
ios_base::sync_with_stdio(false);
fin.tie(nullptr), fout.tie(nullptr);
fin.getline(input, MAX_SIZE + 5);
original = "";
for(int i=0; input[i] != 0; i++)
original += input[i];
fin>>q>>changes;
for(char ch='A'; ch<='Z'; ch++)
turn[ch] = false;
for(int qi=0; qi < q; qi++){
turn[changes[qi]] = (!turn[changes[qi]]);
eval = "";
for(int i=0; i < (int)original.size(); i++)
if(original[i] != ' '){
if('A' <= original[i] && original[i] <= 'Z'){
aux = original[i];
while(i+1 < (int)original.size() && ('A' <= original[i+1] && original[i+1] <= 'Z')){
i++;
aux += original[i];
}
if(aux == "TRUE") eval += "1";
else if(aux == "FALSE") eval += "0";
else if(aux == "NOT") eval += "!";
else if(aux == "AND") eval += "*";
else if(aux == "OR") eval += "+";
else{
if(turn[aux[0]] == false)
eval += "0";
else
eval += "1";
}
}else{
eval += original[i];
}
}
poz = 0, lim = (int)eval.size();
fout<<expresie();
}
return 0;
}