Cod sursa(job #1235510)

Utilizator hasmasandragosHasmasan Dragos hasmasandragos Data 29 septembrie 2014 21:40:09
Problema Medie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <fstream>
#include <stack>
#include <cstring>
#define W33D 420
using namespace std;

ifstream f("editor.in");
ofstream g("editor.out");

const int nmax = 60005;
int t,i,ok,j;
char a[nmax];
stack <char> stiv;
stack <char> val;

int main()
{
    f>>t; f.get();
    while (t--)
    {
        while (!stiv.empty())
            stiv.pop();
        while (!val.empty())
            val.pop();

        f.getline(a,nmax);
        j=0;
        for (i=0;i<strlen(a);i++)
        {
          if (a[i]=='[' || a[i]=='(' || a[i]==')'|| a[i]==']')
           stiv.push(a[i]);
          if (a[i]=='*' && !stiv.empty())
            stiv.pop();
          if (a[i]=='E')
            break;
        }

        j=stiv.size();
        ok=1;

        while (j--)
        {
         if (stiv.top()==']')
           val.push(']');
         if (stiv.top()==')')
           val.push(')');
        if (stiv.top()=='(')
         {
             if (val.empty())
             {
                 j=0;
                 ok=0;
                 break;
             }

             if (val.top()==')')
              val.pop();

            else
             {
                 j=0;
                 ok=0;
                 break;
             }

          }

           if (stiv.top()=='[')
         {
             if (val.empty())
             {
                 j=0;
                 ok=0;
                 break;
             }

             if (val.top()==']')
              val.pop();

            else
             {
                 j=0;
                 ok=0;
                 break;
             }

          }
         stiv.pop();
        }

        if (val.empty() && ok)
            g<<":)"<<'\n';
        else
          g<<":("<<'\n';
    }

    f.close();
    g.close();
    return 0;
}