Cod sursa(job #2533444)

Utilizator qThunderStefan Durlanescu qThunder Data 29 ianuarie 2020 00:14:38
Problema Bool Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.99 kb
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int n,i;
char c[1004],c1[1004],cc;
int v[1004],s,k,m;

int expor();
int expand();
int expnot();
int exp();
int expor()
{
    int r=expand();
    while(c[i]=='|')
    {
        i++;
        r=(r | expand());
    }
    return r;
}
int expand()
{
    int r=expnot();
    while(c[i]=='&')
    {
        i++;
        r=(r & expnot());
    }
    return r;
}
int expnot()
{
    int r=exp();
    while(c[i]=='^')
    {
        i++;
        r=(r ^ exp());
    }
    return r;
}
int exp()
{
    int r;
    if(c[i]=='(')
    {
       i++;
       r=expor();
       i++;
    }
    else
    {
        if(c[i]==0)
        {
            i++;
            return 0;
        }
        if(c[i]==1)
        {
            i++;
            return 1;
        }
        return v[c[i++]];
    }
}
int main()
{
    fin.get(c,1000);
    n=strlen(c1);
    for(int i=0;i<n;i++)
    {
        if (c1[i]!=' ')
            continue;
        if (c1[i]=='A' && c1[i+1]=='N')
        {
            c[k]='&';
            i+=2;
            k++;
            continue;
        }
        if (c1[i]=='N' && c1[i+1]=='O')
        {
            c[k]='1';
            k++;
            c[k]='^';
            i+=2;
            k++;
            continue;
        }
        if (c1[i]=='O' && c1[i+1]=='R')
        {
            c[k]='|';
            i++;
            k++;
            continue;
        }
        if (c1[i]=='T' && c1[i+1]=='R')
        {
            c[k]='1';
            i+=3;
            k++;
            continue;
        }
        if (c1[i]=='F' && c1[i+1]=='A')
        {
            c[k]='0';
            i+=4;
            k++;
            continue;
        }
    }
    fin>>m;
    for(int j=1;j<=m;j++)
    {
        fin>>cc;
        v[cc]=1-v[cc];
        i=0;
        fout<<expor();
    }
    return 0;
}