Cod sursa(job #2271654)

Utilizator radugnnGone Radu Mihnea radugnn Data 29 octombrie 2018 00:21:18
Problema Bool Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.23 kb
/// de continuat
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;

char s[3010],z[3010],aux[3010],modif[200];
int expresie(), termen(), factor(), i,k,x,v[1000],N,j;

ifstream fin ("bool.in");
ofstream fout("bool.out");
void rescriere(){
    for(i=0;i<strlen(s);i++){
            if(s[i]>=65 && s[i]<=90){
                if(s[i]=='A' && s[i+1]=='N'){
                    z[k++]='&';
                        i+=2;
                }
                else
                    if(s[i]=='O' && s[i+1]=='R'){
                        z[k++]='|';
                        i++;
                    }
                    else
                        if(s[i]=='F' && s[i+1]=='A'){
                            z[k++]='0';
                            i+=4;
                        }
                        else
                            if(s[i]=='T' && s[i+1]=='R'){
                                z[k++]='1';
                                i+=3;
                            }
                            else
                                 if(s[i]=='N' && s[i+1]=='O'){
                                    z[k++]='!';
                                    i+=2;
                                }
                                else
                                    z[k++]=s[i];


            }
            else
                if(s[i]=='(' || s[i]==')')
                z[k++]=s[i];
    }


}
int expresie(){
    int r;
    r = termen();

    while (z[i] == '|') {
            i++;
            r |= termen();

    }

    return r;
}


int termen(){
   int r;
    r = factor();

    while (z[i] == '&') {
            i++;
            r &= factor();

    }

    return r;
}
int factor(){
    int r;
    if(z[i]=='!'){
        i++;
        return !factor();
    }
    else{
        if(z[i]=='('){
            i++;
            r=expresie();
            i++;
        }
        else{
            r=v[z[i]];
            i++;
        }

        return r;
    }
}
int main () {
    fin.get(s,3000);
    rescriere();
    fin>>N;
    fin>>modif;
    for(j=0;j<N;j++){
        v[modif[i]]=!v[modif[i]];
        i=1;
        fout<<expresie();
    }
    return 0;
}