Cod sursa(job #137231)

Utilizator vunvixvunvulea mariana vunvix Data 17 februarie 2008 10:29:39
Problema Nivele Scor 0
Compilator fpc Status done
Runda preONI 2008, Runda 4, Clasele 11-12 Marime 1.17 kb
type ref=^inr;
     inr=record
     x:longint;
     next:ref;
     end;
var f,g:text;
k,n,i,j,t,max,x:longint;
q2,p,u,q,pr:ref;
ok:boolean;
begin
assign(f,'nivele.in');reset(f);
assign(g,'nivele.out');rewrite(g);
readln(f,t);
for i:=1 to t do begin
 read(f,n);
 new(p);
 p^.x:=0;
 p^.next:=nil;
 u:=p; pr:=p;
 ok:=true;
 for j:=1 to n do begin
  read(f,x);
  new(q);
  q^.x:=x;
  q^.next:=nil;
  u^.next:=q;
  u:=q;
  if max<x then begin
   max:=x;
   q2:=q;
   end;
  end;
  p:=pr^.next;
  dispose(pr);
  pr:=p;
  while p<>q2 do p:=p^.next;
  if (p^.next^.x<>p^.x)or (p^.next=nil) then ok:=false;
  while ok and (n>1) do begin
  n:=n-1;
  p:=pr;
  while p<>q2 do p:=p^.next;
  p^.x:=p^.x-1;
  q:=p^.next;
  p^.next:=p^.next^.next;
  dispose(q);
  p:=pr; max:=0;
  while p<> nil do begin
   if p^.x>max then begin
    max:=p^.x;
    q2:=p;
    end;
   p:=p^.next;
   end;
  if (q2^.x<>q2^.next^.x)and (q2^.next=nil)then ok:=false;
  if not(ok)and (n=1)then ok:=true;
  end;
  {if (n=1)and (q2^.x<>1)and ok then ok:=false;}
  if ok then writeln(g,'DA')else writeln(g,'NU');
  dispose(pr);
 readln(f);
 end;
close(f);
close(g);
end.