Cod sursa(job #2320258)

Utilizator lucaperjuLuca Perju Verzotti lucaperju Data 14 ianuarie 2019 16:16:57
Problema Bool Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin ("pascal.in");
ofstream cout ("pascal.out");
char s[103];
int v[100];
int p;
int expresie();
int termen();
int factor();
int expresie ()
{
    int sum=termen();
    while(s[p]=='|')
    {
        ++p;
        sum=max(sum,termen());
    }
    return sum;
}
int termen ()
{
    int sum=factor();
    while(s[p]=='&')
    {
        ++p;
        sum=min(sum,factor());
    }
    return sum;
}
int factor ()
{
    int sum=0,val=0;
    while(s[p]=='-')
    {
        ++sum;
        ++p;
    }
    if(s[p]=='(')
    {
        ++p;
        val=expresie();
        ++p;
        return sum&1;
    }
    sum+=v[s[p]-'A'];
   /* while(s[p]>='0' && s[p]<='9')
    {
        val=val*10+(s[p]-'0');
        ++p;
    }*/
    return sum&1;
}
int main()
{
    long long r,i,cur=0,cnt=0,inmul,imp=2,k=-1;
    cin.getline(s,100);
    int n=strlen(s);
    v['Z'-'A'+1]=1;
    for(i=0;i<n;++i)
    {
        if(s[i]=='T' && s[i+1]=='R')
            s[++k]='Z'+1;
        else
        if(s[i]=='F' && s[i+1]=='A')
            s[++k]='Z'+2;
        else
        if(s[i]=='N' && s[i+1]=='O')
            s[++k]='-';
        else
        if(s[i]=='A' && s[i+1]=='N')
            s[++k]='&';
        else
        if(s[i]=='O' && s[i+1]=='R')
            s[++k]='|';
        else
        if((s[i]<'A' || s[i]>'Z') && s[i]!=' ')
            s[++k]=s[i];
        else
        if(s[i]>='A' && s[i]<='Z' && (i==0 || s[i-1]<'A' || s[i-1]>'Z'))
            s[++k]=s[i];
    }
    for(i=k+1;i<n;++i)
        s[i]=0;
    n=k;
    int m;
    cin>>m;
    for(i=1;i<=m;++i)
    {
        char c;
        cin>>c;
        c-='A';
        ++v[c];
        v[c]&=1;
        cout<<expresie();
    }
}