Cod sursa(job #163492)

Utilizator free2infiltrateNezbeda Harald free2infiltrate Data 22 martie 2008 13:35:16
Problema Vanatoare Scor 10
Compilator fpc Status done
Runda preONI 2008, Runda Finala, Clasele 11-12 Marime 1.68 kb
program vanatori;
type vect = record
            c,v : longint;
            end;
var A : array [1..16] of vect;
    sol,poz : array [0..16] of longint;
    m,j,T,k : longint;
    n1,n2,i,n,r : shortint;
    f,g : text;
    ok : boolean;
procedure list(li,ls:longint);
var i,j,i0,j0,p : longint;
    d : vect;
begin
i := li;
j := ls;
i0 := 0;
j0 := -1;
while i<j do begin
if A[i].c>A[j].c then begin
                        d := A[i];
                        A[i] := A[j];
                        A[j] := d;
                        p := i0;
                        i0 := -j0;
                        j0 := -p;
                        end;
i := i+i0;
j := j+j0;
end;
k := i;
end;



procedure quick(li,ls:longint);
begin
if li<ls then begin
list(li,ls);
quick(li,k-1);
quick(k+1,ls);
end;
end;



begin
assign(f,'vanatoare.in');
reset(f);
assign(g,'vanatoare.out');
rewrite(g);
readln(f,n,T);

for i := 1 to n do
readln(f,A[i].c,A[i].v);

quick(1,n);
n1 := 0;
for i := 1 to n do
if A[i].c<>sol[n1] then begin
                        inc(n1);
                        sol[n1] := A[i].c;
                        end;

ok := true;

r := 1;
repeat
if A[r].v=0 then r := r+1;
if A[r].c+A[r].v>T then r := r+1
                   else
begin
A[r].c := A[r].c+A[r].v;
quick(1,n);

n2 := 0;

for i := 1 to n do
if A[i].c<>poz[n2] then begin
                        inc(n2);
                        poz[n2] := A[i].c;
                        end;
if n2<n1 then begin
              n1 := n2;
              sol := poz;
              end;
end;

until r=n+1;


writeln(g,n1);
for i := 1 to n1 do
write(g,sol[i],' ');

close(f);
close(g);

end.