Pagini recente » Cod sursa (job #1007955) | Cod sursa (job #1782583) | Cod sursa (job #1173432) | Cod sursa (job #3266585) | Cod sursa (job #137557)
Cod sursa(job #137557)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define DxBG
#define fin "nivele.in"
#define fout "nivele.out"
#define pb push_back
const int Nmax = 50100;
int N,T;
vector <int> v;
int bun()
{
int i,j,cnt,lev,nr_nod;
nr_nod = 0;
lev = v[0] + 1;
for ( i = 0; i < N; )
{
if ( lev - 1 != v[i] )
{
while ( lev - 1 != v[i] && nr_nod )
{
--lev;
nr_nod /= 2;
}
if ( nr_nod == 0 )
return 0;
}
for ( j = i, cnt = 0; j < N && v[j] == v[i]; ++j ) ++cnt;
#ifdef DBG
printf("%d %d %d\n",nr_nod,v[i],cnt);
#endif
if ( nr_nod % 2 != cnt % 2 )
return 0;
nr_nod = ( nr_nod + cnt ) / 2;
lev = v[i];
i = j;
}
--lev;
while ( lev != 1 && nr_nod ) { nr_nod /= 2; --lev; };
if ( lev != 1 || nr_nod != 1 )
return 0;
return 1;
}
void readsolve()
{
int i,lev;
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%d",&T);
while ( T -- )
{
scanf("%d",&N);
v.clear();
for ( i = 0; i < N; ++i )
{
scanf("%d",&lev);
v.pb(lev);
}
sort(v.rbegin(),v.rend());
if ( bun() )
printf("DA\n");
else
printf("NU\n");
}
}
int main()
{
readsolve();
return 0;
}