Cod sursa(job #3237683)

Utilizator vladsoartavlad sofronea vladsoarta Data 11 iulie 2024 18:57:34
Problema Bool Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <iostream>
#include <string>
using namespace std;

string newS,com,s,dummy;
bool frecv[27];
const int chardif=65;
int i,n;

bool AND(),NOT(),elem();

bool OR()
{
    bool or_op = AND();
    while(s[i]=='O')
    {
        i++;
        or_op=or_op || AND();
    }
}
bool AND()
{
    bool and_op = NOT();
    while(s[i]=='A')
    {
        i++;
        and_op=and_op && NOT();
    }
}
bool NOT()
{
    bool not_op = elem();
    while(s[i]=='N')
    {
        i++;
        not_op=not_op && elem();
    }
}
bool elem()
{
    if(s[i]=='(')
    {
        i++;
        bool val=OR();
        return val;
    }
    return frecv[s[i]-chardif];
}

int main()
{
    cin>>s;
    cout<<s;
    cin>>dummy;
    cin>>n;
    cin>>dummy;
    cin>>com;
    int lastptr=0;
    for(i=0; i<s.size(); i++)
    {
        if(s[i]==' '||s[i]=='('||s[i]==')'&&s[lastptr]!=' ')
        {
            string subs = s.substr(lastptr,i-lastptr);
            if(subs=="TRUE")
                newS.push_back('1');
            else if(subs=="FALSE")
                newS.push_back('0');
            else if(subs=="NOT")
                newS.push_back('N');
            else if(subs=="AND")
                newS.push_back('A');
            else if(subs=="OR")
                newS.push_back('O');
            else
                newS.push_back(subs[0]);
            lastptr=i+1;
        }
        while(s[i]=='('||s[i]==')')
            newS.push_back(s[i]);

    }
    cout<<newS;
    s=newS;

    for(int j=0; j<com.size(); j++)
    {
        frecv[com[j]-chardif]= !frecv[com[j]-chardif];
        cout<<OR();
    }
    return 0;
}