Pagini recente » Cod sursa (job #52435) | Cod sursa (job #1475646) | Cod sursa (job #1998593) | Cod sursa (job #491884) | Cod sursa (job #2790580)
#include <stdio.h>
#include <string>
using namespace std;
bool elem[100];
int poz, lung;
char s[1002];
bool evalSol();
bool getElem() {
bool n = 0, val;
if( s[poz] == 'N' ) {
n = 1;
poz += 3;
}
if( s[poz] == '(' ) {
val = ( evalSol() ^ n );
poz++;
} else if( s[poz] == 'T' && s[poz + 1] == 'R' ) {
val = ( 1 ^ n );
poz += 4;
} else if( s[poz] == 'F' && s[poz + 1] == 'A' ) {
val = ( 0 ^ n );
poz += 5;
} else {
val = ( elem[s[poz]] ^ n );
poz++;
}
return val;
}
bool evalSol() {
poz++;
int val, op;
val = getElem();
while( ( s[poz] == 'A' && s[poz + 1] == 'N' && s[poz + 2] == 'D' ) or ( s[poz] == 'O' && s[poz + 1] == 'R' ) ) {
if( s[poz] == 'A' && s[poz + 1] == 'N' && s[poz + 2] == 'D' ) {
poz += 3;
val = ( val & getElem() );
} else {
poz += 2;
val = ( val | getElem() );
}
}
return val;
}
int main() {
FILE *fin, *fout;
fin = fopen( "bool.in", "r" );
fout = fopen( "bool.out", "w" );
int t;
char ch;
ch = fgetc( fin );
while( ch != '\n' ) {
if( ch != ' ' ) {
lung++;
s[lung] = ch;
}
ch = fgetc( fin );
}
fscanf( fin, "%d", &t );
fgetc( fin );
while( t-- ) {
ch = fgetc( fin );
elem[ch] = ( elem[ch] ^ 1 );
poz = 0;
fprintf( fout, "%d", evalSol() );
}
return 0;
}