Cod sursa(job #1775887)

Utilizator Bodo171Bogdan Pop Bodo171 Data 10 octombrie 2016 19:43:57
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include<fstream>
using namespace std;
string s,changes;
int c,i,n,val[30];
int eval();
int termen();
int termen()
{
    int ret=0;
    if(s[c]==' ')
        c++;
    if(s[c]=='T'&&s[c+1]=='R') {c+=4;return 1;}
    if(s[c]=='F'&&s[c]=='A') {c+=5;return 0;}
    if(s[c]=='(') {c++;ret=eval();return ret;}
    if(s[c]=='N'&&s[c+1]=='O') {c+=3;ret=termen();return (1^ret);}
    if(s[c]>='A'&&s[c]<='Z') {ret=val[s[c]-'A'];c++;return ret;}
}
int eval()
{
     int curr=0;bool ok=0;
    while(c<=s.size())
     {
     if(c==s.size()||s[c]==')') {c++;return curr;}
     if(s[c]==' ') c++;
     if(s[c]=='A'&&s[c+1]=='N')
     {
         c+=3;ok=1;
         curr&=termen();
     }
     if(s[c]=='O'&&s[c+1]=='R')
     {
         c+=2;ok=1;
         curr|=termen();
     }
     if(ok==0) curr=termen();
     }
}
int main()
{
    ifstream f("bool.in");
    ofstream g("bool.out");
    getline(f,s);
    f>>n;
    f>>changes;
    for(i=0;i<n;i++)
    {
        val[changes[i]-'A']^=1;
        c=0;
        g<<eval();
    }
    return 0;
}