Cod sursa(job #2144916)

Utilizator EdgeLordXDOvidiuPita EdgeLordXD Data 26 februarie 2018 23:43:11
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.31 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
#define ll long long
string s="";
string s1="";
int n1=0, n2=0,cp=0;
bool v[1001];
char o[1001];
bool add(char op, bool a, bool b){
    switch(op){
        case '&': return (a&b);
        case '|': return (a|b);
    }
}
bool exp(){
    int i;
    for(i=0; i<s.length(); ++i){
        if(s[i]=='(')
            o[++n2]=s[i];
        else if(s[i]==')'){
            while(o[n2]!='('){
                --n2, --n1;
                v[n1]=add(o[n2+1],v[n1],v[n1+1]);
            }
            --n2;
        }
        else if(s[i]=='1'){
            if(s[i-1]=='!')
                    v[++n1]=0;
            else
                v[++n1]=1;
        }
        else if(s[i]=='0'){
            if(s[i-1]=='!')
                    v[++n1]=1;
            else
                v[++n1]=0;
        }
        else if(s[i]=='&'){//cout<<"a";
            while(o[n2]!='(' && n2>0 && o[n2]!='|'){
                --n2, --n1;
                v[n1]=add(o[n2+1],v[n1],v[n1+1]);
            }
            o[++n2]='&';
        }
        else if(s[i]=='|'){
            while(o[n2]!='(' && n2>0){
                --n2, --n1;
                v[n1]=add(o[n2+1],v[n1],v[n1+1]);
            }
            o[++n2]='|';
        }
    }
    while(n2>0){
        --n2, --n1;
        v[n1]=add(o[n2+1],v[n1],v[n1+1]);
    }
    return v[1];
}
int main(){
    int i;
    getline(cin,s1);
    while(s1.find("TRUE")!=string::npos)
        s1.replace(s1.find("TRUE"),4,"1");
    while(s1.find("FALSE")!=string::npos)
        s1.replace(s1.find("FALSE"),5,"0");
    while(s1.find("AND")!=string::npos)
        s1.replace(s1.find("AND"),3,"&");
    while(s1.find("OR")!=string::npos)
        s1.replace(s1.find("OR"),2,"|");
    while(s1.find("NOT")!=string::npos)
        s1.replace(s1.find("NOT"),3,"!");
    while(s1.find(" ")!=string::npos)
        s1.replace(s1.find(" "),1,"");
    int n;
    s=s1;
    for(i=0; i<s.length(); ++i)
        if(s1[i]>='A' && s1[i]<='Z')
            s[i]='0';
    char c;
    cin>>n;
    while(n--){
        n1=0, n2=0;
        cin>>c;
        for(i=0; i<s.length(); ++i)
            if(s1[i]==c)
                s[i]=char(!(int(s[i])-48)+48);
        cout<<exp();
    }
}