Cod sursa(job #1959653)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 9 aprilie 2017 19:18:09
Problema Bool Scor 20
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 + 1] == 'N') sir += '&', i += 2;
        else
        if (s[i] == 'O' && s[i + 1] == 'R') sir += '|', ++i;
        else
        if (s[i] == 'N' && s[i + 1] == 'O') 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 if (isalpha(s[i]) || s[i] == '(' || s[i] == ')') 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] - '0', ++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;
}