Cod sursa(job #1274979)

Utilizator lokixdSebastian lokixd Data 24 noiembrie 2014 17:10:07
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
 
using namespace std;
 
ifstream fin("bool.in");
ofstream fout("bool.out");
char s[1002],x;
int n,i,j;
int v[256];
int solve();
int termen(){
    int r=0;
    if(s[i]=='('){
        i++,r=solve(),i++;
    }else if(s[i]=='N' && s[i+1]=='O'){
        while(s[i]>='A' && s[i]<='Z')
            i++;
        i++;
        r=1-(termen());
    }else if(s[i]=='T' && s[i+1]=='R'){
        while(s[i]>='A' && s[i]<='Z')
            i++;
        i++;
        r=1;
    }else if(s[i]=='F' && s[i+1]=='A'){
        while(s[i]>='A' && s[i]<='Z')
            i++;
        i++;
        r=0;
    }else{
        r=v[s[i]];
        while(s[i]>='A' && s[i]<='Z')
            i++;
        i++;
    }
    return r;
 
}
int factor(){
    int r=termen();
    while(s[i]=='A' && s[i+1]=='N'){
        while(s[i]>='A' && s[i]<='Z')
            i++;
        i++;
        r=r&termen();
    }
    return r;
}
int solve(){
    int r=factor();
    while(s[i]=='O' && s[i+1]=='R'){
        while(s[i]>='A' && s[i]<='Z')
            i++;
        i++;
        r=r|factor();
    }
    return r;
}
int main(){
    fin.get(s,1002);fin.get();
    fin>>n;
    for(j=1;j<=n;j++){
        fin>>x;
        v[x]=1-v[x];
        i=0;
        fout<<solve();
    }
    fin.close();fout.close();
    return 0;
}