Cod sursa(job #2220209)

Utilizator patcasrarespatcas rares danut patcasrares Data 10 iulie 2018 22:26:05
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.71 kb
#include<fstream>
#include<queue>
#include<iostream>
#include<cstring>
#include<map>
#include<algorithm>
#include<unordered_map>
#include<stack>
#define DN 1005
#define x first
#define y second
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int n,poz,r[35],nr=-1,m;
char a[DN],q[DN],b[DN];
int ve();
int factor()
{
    int s=0;
    if(a[poz]=='N'&&a[poz+1]=='O')
    {
        poz+=3;
        s=1-factor();
    }
    else
        if(a[poz]=='(')
        {
            poz++;
            s=ve();
            poz++;
        }
        else
            if(a[poz]=='T'&&a[poz+1]=='R')
            {
                poz+=4;
                s=1;
            }
            else
                if(a[poz]=='F'&&a[poz+1]=='A')
                {
                    poz+=5;
                    s=0;
                }
                else
                {
                    s=r[a[poz]-'A'];
                    poz++;
                }
    //cout<<s<<'\n';
    return s;
}
int termen()
{
    int s;
    s=factor();
    while(a[poz]=='A')
    {
        poz+=3;
        s=(s&factor());
    }
    //cout<<s<<'\n';
    return s;
}
int ve()
{
    int s=0;
    s=termen();
    while(a[poz]=='O')
    {
        poz+=2;
        s=(s|termen());
    }
   // cout<<s<<'\n';
    return s;
}
int main()
{
    fin.getline(b,DN);
    fin>>n;
    fin.getline(q+1,DN);
    fin.getline(q+1,DN);
    m=strlen(b);
    for(int i=0;i<m;i++)
        if(b[i]!=' ')
        {
            nr++;
            a[nr]=b[i];
        }
    nr++;
    a[nr]='\0';
    for(int i=1;i<=n;i++)
    {
        r[q[i]-'A']=1-r[q[i]-'A'];
        poz=0;
        fout<<ve();
    }
}