Cod sursa(job #219683)

Utilizator elenacerchiaCerchia Elena-Geanina elenacerchia Data 8 noiembrie 2008 02:56:06
Problema Nivele Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb


#include <stdio.h>
#include<math.h>
#define MAX_N 50005
#define FIN "nivele.in"
#define FOUT "nivele.out"


int T, N, stk[MAX_N],max;

int putere(int n){
 int k=1;
 int ok=0;
   while(!ok && k<100000){
    if(n==pow(2,k))
     ok=1;
    else k++; 
    }
    
    return ok;
}
    
 int main()
{
    int i,x,niv,lvs,ok;

    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);

    for (scanf("%d", &T); T; --T){
         ok=1;max=0;for(i=1;i<=50000;i++) stk[i]=0;
        scanf("%d", &N);
        for (i = 1; i <= N; ++i){
         scanf("%d",&x);
         stk[x]++;if(max<x) max=x;
         }
        niv=max;
        lvs=stk[niv];
        if(!putere(lvs)||lvs>pow(2,niv-1) ) ok=0;
        
        else { while(niv>=3 && ok){
                niv--;
                lvs=stk[niv];
                if(lvs>pow(2,niv-1)-stk[niv+1]/2)
                  ok=0;        
                  }
                  
                  }        
                  
           if(!( stk[2]==0 ||stk[2]==1 ||stk[2]==2))
              ok=0;
           if(!ok) printf("%s\n","NU");
            else printf("%s\n","DA");
 }
 
 
 return 0;
}