Cod sursa(job #1554953)

Utilizator kindaassfourblabla kindaassfour Data 21 decembrie 2015 23:48:57
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
#include <vector>

/*evaluating a given expression */

using namespace std;
 
char x[1024];
string v;
int a[256], k;
 
inline int one ();
inline int two ();
inline int three ();
 
inline int one ()
{
    int result = two ();
    while (v[k] == '|')
        ++k, result |= two ();
 
    return result;
}
 
inline int two ()
{
    int result = three ();
    while (v[k] == '&')
        ++k, result &= three ();
 
    return result;
}
 
inline int three ()
{
    int result;
    if (v[k] == '!')
    {
        ++k;
        return 1 ^ three ();
    }
 
    if (v[k] == '(')
    {
        ++k;
        int result = one ();
 
        ++k;
        return result;
    }
 
    ++k;
    return a[v[k - 1]];
}
 
int main ()
{
    freopen ("bool.in", "r", stdin);   
	/* in file bool.in we have : the expression on first line , for ex ( a or ( b or c) and (true)) ,2nd line its how many times a,b,c was modified ,
	3rd line is which of a,b,c is modified */
	
    freopen ("bool.out", "w", stdout);
 
    gets (x);
 
    a['1'] = 1;
    int nn = strlen (x);
    for (int i = 0; i < nn; ++i)
    {
        if (x[i] == ' ') continue;
        else if (x[i] == 'T' && x[i + 1] == 'R') v += '1', i += 3;  // true		
        else if (x[i] == 'F' && x[i + 1] == 'A') v += '0', i += 4;  // false
        else if (x[i] == 'O' && x[i + 1] == 'R') v += '|', ++i;     // or
        else if (x[i] == 'A' && x[i + 1] == 'N') v += '&', i += 2;  // and
        else if (x[i] == 'N' && x[i + 1] == 'O') v += '!', i += 2;  // not 
        else v += x[i];
    }
 
    int n;
    scanf ("%d\n", &n);
 
    for (int i = 1; i <= n; ++i)
    {
        char c;
        scanf ("%c", &c);
 
        a[c] ^= 1;
        k = 0;
 
        printf ("%d", one ());
    }
 
    printf ("\n");
 
    return 0;
}