Nu aveti permisiuni pentru a descarca fisierul grader_test2.in

Cod sursa(job #1898397)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 1 martie 2017 23:42:07
Problema Bool Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
# include <bits/stdc++.h>

using namespace std;

const int Nmax = 1005;

int Litera[100], i, Q, n, ind;
char s[Nmax], q[105];
string sir;

void normalizare() {
    for (int i = 1; i <= n; ++i) {
        if (s[i] == 'A' && s[i + 2] == 'D') sir += '&', i += 2;
        else
        if (s[i] == '0' && s[i + 1] == 'R') sir += '|', ++i;
        else
        if (s[i] == 'N' && s[i + 2] == 'T') sir += '!', i += 2;
        else
        if (s[i] == 'T' && s[i + 1] == 'R') sir += '1', i += 3;
        else
       if (s[i] == 'F' && s[i + 1] == 'A') sir += '0', i += 4;
        else sir += s[i];
    }
}

int SAU();

int NOT() {
    int nr = 0;

    if (sir[ind] == '(') ++ind, nr = SAU(), ++ind;
    else if (sir[ind] == '!') ++ind, nr = NOT() ^ 1;
    else if (isalpha(sir[ind])) nr = Litera[sir[ind]], ++ind;
    else nr = sir[ind], ++ind;

    return nr;
}

int SI() {
    int nr = NOT();

    while (sir[ind] == '&') ++ind, nr &= NOT();

    return nr;
}

int SAU() {
    int nr = SI();

    while (sir[ind] == '|') ++ind, nr |= SI();

    return nr;
}

int main ()
{
    freopen("bool.in", "r", stdin);
    freopen("bool.out", "w", stdout);

    gets(s + 1), n = strlen(s + 1);

    scanf("%d\n", &Q);

    gets(q + 1);

    sir += ' ';

    normalizare();

    cerr << sir;

    for (i = 1; i <= Q; ++i){
        ind = 1, Litera[q[i]] ^= 1;
        printf("%d", SAU());
    }

    printf("\n");

    return 0;
}