Cod sursa(job #3354558)

Utilizator AndreiB1863Andrei Bancescu AndreiB1863 Data 18 mai 2026 21:58:10
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int val[26];
int i;
char* tok[500];
int ntok;
int atom(), termen(), expresie();
int atom()
{
    if(strcmp(tok[i],"NOT")==0){
        ++i;
        return 1-atom();
    }
    if(strcmp(tok[i],"TRUE")==0){
        ++i;
        return 1;
    }
    if(strcmp(tok[i],"FALSE")==0){
        ++i;
        return 0;
    }
    if(strcmp(tok[i],"(")==0){
        ++i;
        int v=expresie();
        ++i;
        return v;
    }
    int v=val[tok[i][0]-'A'];
    ++i;
    return v;
}
int termen()
{
    int v=atom();
    while(i<ntok && strcmp(tok[i],"AND")==0){
        ++i;
        v=v&atom();
    }
    return v;
}
int expresie()
{
    int v=termen();
    while(i<ntok && strcmp(tok[i],"OR")==0){
        ++i;
        v=v|termen();
    }
    return v;
}
int evalueaza()
{
    i=0;
    return expresie();
}
int main()
{
    char s[1005];
    fin.getline(s, 1005);
    char s2[3005];
    int j=0;
    for(int k=0; s[k]; ++k){
        if(s[k]=='(' || s[k]==')'){
            s2[j++]=' ';
            s2[j++]=s[k];
            s2[j++]=' ';
        } else {
            s2[j++]=s[k];
        }
    }
    s2[j]=0;
    char* p=strtok(s2, " ");
    while(p!=NULL){
        tok[ntok++]=p;
        p=strtok(NULL, " ");
    }
    int n;
    fin>>n;
    fin.get();
    char modificari[105];
    fin.getline(modificari, 105);
    for(int k=0; k<n; ++k){
        val[modificari[k]-'A']=1-val[modificari[k]-'A'];
        fout<<evalueaza();
    }
    fout<<"\n";
    return 0;
}