Cod sursa(job #1882729)

Utilizator sandupetrascoPetrasco Sandu sandupetrasco Data 17 februarie 2017 14:04:38
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>
#define IOS ios_base::sync_with_stdio(0);
#define tie cin.tie(0);
#define mp make_pair
#define ll long long
#define PII pair<int, int>
#define PLL pair<ll, ll>
#define zeros(x) ( (x ^ (x - 1)) & x )
   
using namespace std;
  
int n, cnt, p;
string s;
char rs[2005], c;
bool u[2005];
 
bool evaluate();
bool ter();
 
bool fac()
{
    bool r;
    if (rs[p] == 'N' && rs[p+1] == 'O'){ p += 3; return !fac();}
    else if (rs[p] == 'T' && rs[p+1] == 'R'){ p += 4; return true;}
    else if (rs[p] == 'F' && rs[p+1] == 'A'){ p += 5; return false;}
    else if (rs[p] == '(') ++p, r = evaluate(), ++p;
    else r = u[rs[p]], ++p;
    return r;
}
 
bool ter()
{
    bool r = fac();
    while (rs[p] == 'A' && rs[p+1] == 'N') p += 3, r &= fac();
    return r;
}
 
 
bool evaluate()
{
    bool r = ter();
    while (rs[p] == 'O' && rs[p+1] == 'R') p += 2, r |= ter();
    return r;
}
int main(){
    IOS tie
    ifstream cin("bool.in");
    ofstream cout("bool.out");
    noskipws(cin);
    cin >> rs[p];
    while (rs[p] != '\n')
    {
        p += (rs[p] != ' ');
        cin >> rs[p];
    }
    skipws(cin);
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> c;
        u[c] = !u[c];
        p = 0;
        cout << evaluate();
    }
    cerr << "Fucking time elapsed: " << clock() * 1000.0 / CLOCKS_PER_SEC << " ms" << '\n';
    return 0;
}