Cod sursa(job #2111804)

Utilizator elenaisaiaElena Isaia elenaisaia Data 22 ianuarie 2018 18:21:47
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

char s[1005];
int val[30],numar;

int fct(int st,int dr)
{
    while(s[st]==' ')
            st++;
    while(s[dr]==' ')
            dr--;
    int nr=0;
    for(int i=dr;i>st;i--)
        if(nr==0&&s[i]=='R'&&s[i-1]=='O')
        {
            int v1=fct(st,i-2);
            int v2=fct(i+1,dr);
            return (v1||v2);
        }
        else
            if(s[i]==')')
                nr--;
            else
                if(s[i]=='(')
                   nr++;
    nr=0;
    for(int i=dr;i>st+1;i--)
        if(nr==0&&s[i]=='D'&&s[i-1]=='N')
        {
            int v1=fct(st,i-3);
            int v2=fct(i+1,dr);
            return (v1&&v2);
        }
        else
            if(s[i]==')')
                nr--;
            else
                if(s[i]=='(')
                   nr++;
    if(s[st]=='('&&s[dr]==')')
        return fct(st+1,dr-1);
    if(s[st]=='N'&&s[st+1]=='O')
    {
        int v1=(fct(st+3,dr));
        return !v1;
    }
    if(st!=dr)
    {
        if(s[st]=='T')
            return 1;
        return 0;
    }
    int v1=val[s[st]-'A'];
    return v1;
}

int main()
{
    int n,nr;
    ifstream fin("bool.in");
    ofstream fout("bool.out");
    fin.getline(s,1005);
    nr=strlen(s);
    fin>>n;
    for(int i=0;i<n;++i)
    {
        char x;
        fin>>x;
        val[x-'A']=!val[x-'A'];
        fout<<fct(0,nr-1);
    }
    return 0;
}