Cod sursa(job #2682151)

Utilizator ArkhamKnightyMarco Vraja ArkhamKnighty Data 7 decembrie 2020 21:45:00
Problema Nivele Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
#define NMAX 50005

using namespace std;

ifstream cin("nivele.in");
ofstream cout("nivele.out");

/*
    Datorita proprietatilor unui arbore parcurs in preordine, in cazul in care
    exemplul este corect se intampla urmatoarele lucruri
    - o data ce s-a terminat prima parcurgere a nodurilor de stanga,
     se va trece la cel mai de jos subarbore de dreapta

    - astfel, daca avem o stiva, vom putea corela nodul nou citit din arborele de dreapta
    cu ultimul nod citit din arborele de stanga ( fiindca sunt frati ) si le eliminam pe amandoua

    - operatia de eliminare e reducerea gradului unuia dintre frati ( astfel incat
      sa putem "elimina" nodul radacina, adica sa reducem si acolo gradul ca sa
      simplificam mai departe )

    - simplificarea va avea, necesar, ca rezultat un singur nod ramas, de grad 1

    Sa se verifice cu exemple



*/

int v[NMAX];

int main()
{
    int t, n, top;

    cin >> t;
    for(int i = 1 ; i <= t ; i++)
    {
        cin >> n;

        top = 0;
        for(int j = 1 ; j <= n ; j++)
        {
            cin >> v[++top];

            while(top > 1 && v[top - 1] == v[top])
                v[--top]--;
        }

        (top == 1 && v[top] == 1) ? cout << "DA \n" : cout << "NU \n";
    }

    return 0;
}