Cod sursa(job #3362012)

Utilizator Maya_PopaPopa Maya Diana Maya_Popa Data 31 iulie 2026 19:01:14
Problema Bool Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <fstream>

using namespace std;
ifstream fin ("bool.in");
ofstream fout ("bool.out");
int val[26];
void spatiu(const string& s, int p) {
    while (p<s.size() && s[p]==' ') {
        p++;
    }
}
int expresie(const string& s, int& p);
int termen(const string& s, int& p);
int factor(const string& s, int& p);
int factor (const string& s, int& p) {
    spatiu(s, p);
    if (p<s.size() && s[p]=='N' && p+2<s.size() && s[p+1]=='O' && s[p+2]=='T') {
        p+=3;
        return !factor(s, p);
    }
    if (s[p]=='(') {
        p++;
        int sol=expresie(s, p);
        spatiu(s, p);
        if (p<s.size() && s[p]==')') {
            p++;
        }
        return sol;
    }
    if (p+3<s.size() && s.substr(p, 4)=="TRUE") {
        p+=4;
        return 1;
    }
    if (p+4<s.size() && s.substr(p, 5)=="FALSE") {
        p+=5;
        return 0;
    }
    if (s[p]>='A' && s[p]<='Z') {
        int idx=s[p]-'A';
        p++;
        return val[idx];
    }
    return 0;
}
int termen(const string& s, int& p) {
    spatiu(s, p);
    int sol=factor(s, p);
    spatiu(s, p);
    while (p<s.size() && s[p]=='A' && p+2<s.size() && s[p+1]=='N' && s[p+2]=='D') {
        p+=3;
        int dr=factor(s, p);
        sol=sol && dr;
        spatiu(s, p);
    }
    return sol;
}
int expresie (const string& s, int& p) {
    spatiu(s,p);
    int sol=termen(s, p);
    spatiu(s, p);
    while (p<s.size() && s[p]=='O' && p+1<s.size() && s[p+1]=='R') {
        p+=2;
        int dr=termen(s, p);
        sol=sol || dr;
        spatiu(s, p);
    }
    return sol;
}
int main() {
    int n,i,p;
    string s;
    char ch;
    getline(fin, s);
    fin>>n;
    for (i=0; i<n; i++) {
        fin>>ch;
        val[ch-'A']=!val[ch-'A'];
        p=0;
        fout<<expresie(s,p);
    }
    fout<<endl;
    return 0;
}