Cod sursa(job #1348059)

Utilizator andi12Draghici Andrei andi12 Data 19 februarie 2015 14:53:01
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <cstdio>

using namespace std;
char s1[1001];
char s[1001];
char v[101];
int p,vec[50];
int exp();
int termen();
int max(int a,int b)
{
    if(a>=b)
        return a;
    else
        return b;
}
int exp()
{
    int val=termen();
    if(s[p]==' ')
        p++;
    if(s[p]=='A' && s[p+1]=='N' && s[p+2]=='D')
    {
        p=p+3;
        val=(val+termen())/2;
        return val;
    }
    if(s[p]=='O' && s[p+1]=='R')
    {
        p=p+2;
        val=max(val,termen());
        return val;
    }
}
int termen()
{
    int val,semn=0;
    if(s[p]==' ')
        p++;
    if(s[p]=='N' && s[p+1]=='O' && s[p+2]=='T')
    {
        p=p+3;
        semn=(semn+1)%2;
    }
    if(s[p]=='T' && s[p+1]=='R')
    {
        p=p+4;
        val=1;
        return val;
    }
    if(s[p]=='F' && s[p+1]=='A')
    {
        p=p+4;
        val=0;
        return val;
    }
    if(s[p]=='(')
    {
        p++;
        val=exp();
        p++;
        return (val+semn)%2;
    }
    if(s[p]>='A' && s[p]<='Z')
    {
        val=vec[s[p]-'A'];
        p++;
        return (val+semn)%2;
    }
}
int main()
{
    FILE *in,*out;
    in=fopen("bool.in","r");
    out=fopen("bool.out","w");
    int n,ras,i,nr1=0;
    char c;
    fgets(s1,1000,in);
    fscanf(in,"%d",&n);
    c=fgetc(in);
    fgets(v,100,in);
    for(i=0;i<=1000;i++)
    {
        if(s1[i]!=' ')
        {
            s[nr1]=s1[i];
            nr1++;
        }
    }
    for(i=0;i<n;i++)
    {
        vec[v[i]-'A']=(vec[v[i]-'A']+1)%2;
        ras=exp();
        fprintf(out,"%d",ras);
        p=0;
    }
    return 0;
}