Cod sursa(job #137691)

Utilizator VmanDuta Vlad Vman Data 17 februarie 2008 12:56:24
Problema Nivele Scor 60
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasele 11-12 Marime 1.1 kb
#include <stdio.h>
#include <string.h>

#define Nmax 50005

int T,N,f,nr,i;
int A[Nmax];
short int st[Nmax],dr[Nmax];

int solve(int nod,int lvl)
{
 short int r1,r2;
 if (A[f]<lvl) return 0;
 if (A[f]==lvl) { ++f;return 1; }
 //subarborele stang
     ++nr;
     st[nod]=nr;
     r1=solve(nr,lvl+1);
 if ((f>N)||(r1==0)) return 0;
 //subarborele drept
     ++nr;
     dr[nod]=nr;
     r2=solve(nr,lvl+1);
 return r1&r2;
}

int main()
{
 freopen("nivele.in","r",stdin);
 freopen("nivele.out","w",stdout);
 scanf("%d",&T);
 while (T)
       {
        --T;
        scanf("%d",&N);
        for (i=1;i<=N;++i)
             scanf("%d",&A[i]);
        for (i=1;i<=N;++i)
             if (A[i]>N) { N=1;A[1]=0;break; }
        if ((N==1)&&(A[1]==1)) printf("DA\n");
           else
               {
                f=1;
                nr=1;
                memset(st,0,sizeof(st));
                memset(dr,0,sizeof(dr));
                if (solve(1,1)) printf("DA\n");
                   else printf("NU\n");
               }
       }
 fclose(stdin);
 fclose(stdout);
 return 0;
}