Cod sursa(job #1784172)

Utilizator andreiugravuFMI Andrei Zugravu andreiugravu Data 19 octombrie 2016 20:36:15
Problema Deque Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
//Editor
#include <fstream>
#include <cstring>

using namespace std;

ifstream fin("editor.in");
ofstream fout("editor.out");

#define DMAX 60000


int main()
{
    int T, i, j, n, NRD, NRI, NPD, NPI;
    char sir[DMAX];

    fin>>T;
    for(i = 0 ; i < T ; i++) {
        fin>>sir;
        n = strlen(sir);

        if(n == 1) { fout<<":)"<<endl; continue; }

        //modific sirul, dupa fiecare '*'
        for(j = 0 ; j < n ; j++) {
            if(sir[j] == '*') {
                if(j > 0) {
                    strcpy(sir+j, sir+j+1);
                    strcpy(sir+j-1, sir+j);
                    n -= 2;
                    j -= 2;
                }
                else {
                    strcpy(sir+j, sir+j+1);
                    n--;
                    j--;
                }
            }
        }

        NRI = NRD = NPI = NPD = 0;
        for(j = 0 ; j < n-1 ; j++) {
            if(NRD < NRI|| NPD < NPI) { fout<<":("<<endl; break; }
            switch(sir[j]) {
                case '(': NRD++; break;
                case ')': NRI++; break;
                case '[': NPD++; break;
                case ']': NPI++; break;
                default: break;
            }
        }
        if(j == n-1 && NRD == NRI && NPD == NPI)
            fout<<":)"<<endl;
        else
            fout<<":("<<endl;
    }

    fin.close();
    fout.close();

    return 0;
}