Cod sursa(job #1497864)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 7 octombrie 2015 17:56:28
Problema Bool Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.71 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 1000
#define MAXC 26
char v[MAXN+10];
int vf[MAXC],poz,n;
int fact(){
    int nr;
    if(v[poz]=='T'&&v[poz+1]=='R'&&v[poz+2]=='U'&&v[poz+3]=='E'){
        nr=1;
        poz+=4;
    }
    else
        if(v[poz]=='F'&&v[poz+1]=='A'&&v[poz+2]=='L'&&v[poz+3]=='S'&&v[poz+4]=='E'){
          nr=0;
          poz+=5;
       }
       else
          if(v[poz]=='N'&&v[poz+1]=='O'&&v[poz+2]=='T'){
                  poz+=3;
                  nr=!fact();
          }
          else
            if(v[poz]=='('){
                poz++;
                nr=E();
                poz++;
            }
            else
               if(v[poz]>='A'||v[poz]<='Z'){
                   nr=vf[v[poz]-'A'];
                   poz++;
               }
    return nr;
}
inline int term(){
    int nr,x;
    nr=fact();
    while(v[poz]=='A'&&v[poz+1]=='N'&&v[poz+2]=='D'){
        poz+=3;
        x=fact();
        nr=(nr&&x);
    }
    return nr;
}
inline int E(){
    int nr,x;
    nr=term();
    while(v[poz]=='O'&&v[poz+1]=='R'){
        poz+=2;
        x=term();
        nr=(nr||x);
    }
    return nr;
}
int main(){
    FILE*fi,*fout;
    int t,i;
    char a;
    fi=fopen("bool.in" ,"r");
    fout=fopen("bool.out" ,"w");
    a=fgetc(fi);
    n=0;
    while(a!='\n'){
        if(a!=' ')
            v[n++]=a;
        a=fgetc(fi);
    }
    a=fgetc(fi);
    t=0;
    while(a>='0'&&a<='9'){
        t=t*10+a-'0';
        a=fgetc(fi);
    }
    a=fgetc(fi);
    for(i=0;i<t;i++){
        poz=0;
        vf[a-'A']=!vf[a-'A'];
        fprintf(fout,"%d" ,E());
        a=fgetc(fi);
    }
    fclose(fi);
    fclose(fout);
    return 0;
}