Cod sursa(job #2496267)

Utilizator ptudortudor P ptudor Data 20 noiembrie 2019 16:57:08
Problema Bool Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.18 kb
#include <bits/stdc++.h>
using namespace std;

ifstream in("bool.in");
ofstream out("bool.out");

int n,val[30]; /// A = 0
string S;
char solve(string x)
{int i,nr;
   string fin = "" , op = "" , str = "";
   for (i = 0; i < x.size(); )
   {//cout << i << "\n";
      if (x[i] == ' ') i++;
      else if ( (x[i] >= 'A' && x[i] <= 'Z') && (i + 1 >= x.size() || x[i + 1] == ' ') )
         fin += val[x[i] - 'A'], i++;
      else if( x[i] >= 'A' && x[i] <= 'Z')
      {
         op = "";
         while (x[i] >= 'A' && x[i] <= 'Z'){
            op += x[i];
            i++;
         }
         if (op == "AND") fin += 'a';
         else if (op == "OR") fin += 'o';
         else if (op == "NOT") fin += 'n';
         else if (op == "TRUE") fin += char(1);
         else if (op == "FALSE") fin += char(0);
      }
      else if( x[i] == '(' )
      {
         nr = 1 , i++ , str = "";
         while (nr){
            if (x[i] == '(') nr++;
            else if(x[i] == ')') nr--;
            str += x[i];
            i++;
         }
         str.pop_back();
         fin += solve(str);
      }
      //cout << fin << "\n";
   }
   string new_boy = "";
   for (i = 0; i < fin.size();)
      if (fin[i] == 'n'){
         i++;
         new_boy += char ( 1 - int(fin[i]) );
         i++;
      }
      else new_boy += fin[i] , i++;

   fin = new_boy;
   new_boy = "";
   char l;
   for (i = 0; i < fin.size();)
      if (fin[i] == 'a'){
         l = int(new_boy.back()) && int (fin[i + 1]);
         new_boy.pop_back();
         i += 2;
         new_boy += l;
      }
      else new_boy += fin[i] , i++;

   fin = new_boy;
   new_boy = "";
   for (i = 0; i < fin.size();)
      if (fin[i] == 'o'){
         l = int(new_boy.back()) || int (fin[i + 1]);
         new_boy.pop_back();
         i += 2;
         new_boy += l;
      }
      else new_boy += fin[i] , i++;

   fin = new_boy;
   return fin.back();
}
int main()
{int i,j;
   char c;
   getline(in , S);
   in >> n;
   for (i = 1; i <= n; i++)
   {
    in >> c;
    val[c - 'A'] = 1 - val[c - 'A'];
    out << int (solve(S));
   }
   out << "\n";
   in.close();
   out.close();
   return 0;
}