Cod sursa(job #2104461)

Utilizator Alexandru_StoianStoian Sorin Alexandru Alexandru_Stoian Data 11 ianuarie 2018 18:31:33
Problema Bool Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>

using namespace std;

ifstream f ("bool.in");
ofstream g ("bool.out");

bool grad1();
bool grad2();
bool grad3();

char s[ 1001 ], ch;
int i, n;
bool a[ 51 ];

bool grad1(){
    bool r = grad2();
    while( s[ i ] == 'O' && s[ i + 1 ] == 'R' ){
        i = i + 2;
        r = r | grad2();
    }
    return r;
}

bool grad2(){
    bool r = grad3();
    while( s[ i ] == 'A' && s[ i + 1 ] == 'N' && s[ i + 2 ] == 'D' ){
        i = i + 3;
        r = r & grad3();
    }
    return r;
}

bool grad3(){
    bool r = 0;
    if( s[ i ] == '(' ){
        ++i;
        r = grad1();
        ++i;
    }
    else{
        if( s[ i ] >= 'A' && s[ i ] <= 'Z' ){
            if( s[ i ] == 'T' && s[ i + 1 ] == 'R' ){
                r = 1;
                i = i + 4;
            }
            else{
                if( s[ i ] == 'F' && s[ i + 1 ] == 'A' ){
                    r = 0;
                    i = i + 5;
                }
                else{
                    if( s[ i ] == 'N' && s[ i + 1 ] == 'O' ){
                        i = i + 4;
                        r = !a[ s[ i ] = 'A' ];
                    }
                    else{
                        r = a[ s[ i ] - 'A' ];
                        ++i;
                    }
                }
            }
        }
    }
    return r;
}

int main(){
    f.getline( s, 1001 );
    f >> n;
    f.get();
    for( int j = 1; j <= n; ++j ){
        f.get( ch );
        a[ ch - 'A' ] = !a[ ch - 'A' ];
        i = 0;
        g << grad1();
    }
}