Pagini recente » Cod sursa (job #639920) | Cod sursa (job #323076) | Cod sursa (job #13643) | Cod sursa (job #1408664) | Cod sursa (job #137556)
Cod sursa(job #137556)
var fi,fo:text;
T,N,i,j:longint;
A:array[0..50001]of longint;
procedure heapsort(n:longint);
var i,j,k,aux:longint;
begin
for i:=1 to n do
begin
j:=i;
while (j shr 1<>0)and(A[j shr 1]<A[j]) do
begin
aux:=A[j shr 1];
A[j shr 1]:=A[j];
A[j]:=aux;
j:=j shr 1;
end;
end;
i:=n;
while i>1 do
begin
aux:=A[1];
A[1]:=A[i];
A[i]:=aux;
dec(i);
j:=1;
while (j>0) do
begin
k:=2*j;
if (k>i) then break;
if (k+1<=i)and(A[k+1]>A[k]) then inc(k);
if A[j]>=A[k] then break;
aux:=A[j];
A[j]:=A[k];
A[k]:=aux;
j:=k;
end;
end;
end;
procedure solve;
var i,CT,NIV,nivel,putere:longint;
begin
NIV:=0; CT:=1;
for i:=N downto 1 do
if A[i]=A[i-1] then inc(CT)
else
if ((CT+NIV)and 1=0)and((CT+NIV)<=1 shl (A[i]-1)) then
begin
NIV:=(CT+NIV) shr 1;
CT:=1;
end
else
begin
writeln(fo,'NU');
exit;
end;
if NIV=1 then writeln(fo,'DA')
else
if NIV=1 shl (nivel-1) then writeln(fo,'DA')
else writeln(fo,'NU');
end;
begin
assign(fi,'nivele.in'); reset(fi);
assign(fo,'nivele.out'); rewrite(fo);
read(fi,T);
for i:=1 to T do
begin
read(fi,N);
for j:=1 to N do
read(fi,A[j]);
heapsort(N);
solve;
end;
close(fi);
close(fo);
end.