Nu aveti permisiuni pentru a descarca fisierul grader_test3.in
Cod sursa(job #1821314)
Utilizator | Data | 2 decembrie 2016 21:40:34 | |
---|---|---|---|
Problema | Bool | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.42 kb |
#include <cstdio>
#include <cstring>
using namespace std;
FILE *fin = fopen("bool.in", "r");
FILE *fout = fopen("bool.out", "w");
char v[10000];
int a[10000];
int dimensiune, p , n;
bool termen();
bool valoare();
bool expresie();
bool expresie()
{
while (v[p] == ' ' && p <= dimensiune) p++;
bool term1 = termen();
while (v[p] == ' ' && p <= dimensiune) p++;
bool term2;
if(p+1<=dimensiune && v[p]=='O' && v[p+1]=='R')
{
p+=2;
term2 = termen();
}
bool sol = term1 | term2;
while (v[p] == ' ' && p <= dimensiune) p++;
return sol;
}
bool termen()
{
while (v[p] == ' ' && p <= dimensiune) p++;
bool sol = valoare();
while (v[p] == ' ' && p <= dimensiune) p++;
if(p+2<=dimensiune && v[p]=='A' && v[p+1]=='N' && v[p+2]=='D')
{
p+=3;
sol = (sol & valoare());
}
while (v[p] == ' ' && p <= dimensiune) p++;
return sol;
}
bool valoare()
{
while (v[p] == ' ' && p <= dimensiune) p++;
bool x;
if(v[p]=='(')
{
p++;
x = expresie();
p++;
}
else
{
if(p+2<=dimensiune && v[p]=='N' && v[p+1]=='O' && v[p+2]=='T')
{
p+=3;
x = 1 - valoare();
}
else
{
if(p+3<=dimensiune && v[p]=='T' && v[p+1]=='R' && v[p+2]=='U' && v[p+3]=='E')
{
p+=4;
x = 1;
}
else
{
if(p+4<=dimensiune && v[p]=='F' && v[p+1]=='A' && v[p+2]=='L' && v[p+3]=='S' && v[p+4]=='E')
{
p+=5;
x = 0;
}
else
{
x = a[v[p]-'A'];
p++;
}
}
}
}
while (v[p] == ' ' && p <= dimensiune) p++;
return x;
}
char c;
int main()
{
fscanf(fin, "%c", &c);
int ramas = 1;
while(c!='\n')
{
v[ramas] = c;
ramas++;
fscanf(fin, "%c", &c);
}
ramas--;
dimensiune = ramas;
fscanf(fin, "%d", &n);
fscanf(fin, "%c", &c);
for(int i = 1; i<=n;i++)
{
fscanf(fin, "%c", &c);
a[c-'A'] = 1-a[c-'A'];
p=1;
int solutie = expresie();
if(solutie == 1) fprintf(fout,"1");
else fprintf(fout,"0");
}
return 0;
}