Cod sursa(job #782525)

Utilizator idomiralinIdomir Alin idomiralin Data 28 august 2012 11:02:24
Problema Nivele Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.06 kb
# include <cstdio>

using namespace std;

typedef struct nod
{
       long long info;
       nod *urm;
       };

nod *p, *a, *q, *prim, *ultim;

long long ct, val, stiva[50005];
int  main()
{int i, j, t, n;
     
     freopen("nivele.in","r",stdin);
     freopen("nivele.out","w",stdout);
     
     scanf("%d",&t);
     for (i = 1; i <= t; i++)
     {
         scanf("%d",&n);
         for (j = 1; j <= n; j++)
         {
           scanf("%lld",&val);
           
           if (!prim) {
                     prim = new nod;
                     prim -> info = val;
                     ultim = prim;
                     }
           else {
               p = new nod;
               p -> info = val;
               ultim -> urm = p;
               ultim = p;
               }
          } 
         ultim -> urm = prim;
         
     //while (n > 1 && ct)
     //{
           q = ultim;
           for (p = prim; n > 1 || ct; q = q -> urm)
               if (p -> info == stiva[ct]) {
                          ct --;
                          p -> info --;
                          
                          }
               else {
                     if (n == 1 && ct) break; 
                     stiva[++ct] = p -> info;
                     if (p == prim)
                     {
                         a = prim;
                         ultim -> urm = prim -> urm;
                         prim = prim -> urm;
                         p = p -> urm;
                         delete(a);
                         n--;
                         }
                     else{
                          a = q -> urm;
                          q -> urm = p -> urm;
                          if (a == ultim) ultim = q;
                          p = p -> urm;
                          delete(p);
                          n--;
                          }                       
           }
     if (n == 1 && p -> info == 1) printf("DA\n");
                             else printf("NU\n");
     }             
return 0;
}