Cod sursa(job #630243)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 4 noiembrie 2011 23:46:09
Problema Loto Scor 20
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.69 kb
Program loto;
type tip=record
    s:int64;
    x,y:longint;
      end;
 var a:array [1..100] of longint;
    b:array [1..1000000] of tip;
    b1:array [1..1 shl 10] of char;
    i,j,k,n,t:longint;
    s:int64;
    fi,fo:text;
procedure sort(l,r:longint);
 var i,j,k,y:longint;
begin
 i:=l; j:=r; k:=a[(l+r) div 2];
 repeat
  while k>a[i] do inc(i);
   while k<a[j] do dec(j);
  if i<=j then begin
              y:=a[i]; a[i]:=a[j]; a[j]:=y;
              inc(i); dec(j);
              end;
 until i>=j;
 if i<r then sort(i,r);
  if j>l then sort(l,j);
end;
procedure cauta(l,r:longint);
 var mid:longint;
begin
 mid:=(l+r) div 2;
  if l<r then begin
               if b[mid].s>s-b[i].s-b[j].s then cauta(l,mid-1);
               if b[mid].s<s-b[i].s-b[j].s then cauta(mid+1,r);
               if b[mid].s=s-b[i].s-b[j].s then k:=mid;
               end
 else k:=mid;
end;
begin
 assign(fi,'loto.in');
  assign(fo,'loto.out');
 settextbuf(fi,b1);
 reset(fi); rewrite(fo);
 readln(fi,n,s);
 for i:=1 to n do read(fi,a[i]);
  sort(1,n);
  for i:=1 to n do
   for j:=i to n do begin
                      inc(t);
                      b[t].s:=a[i]+a[j];
                      b[t].x:=a[i]; b[t].y:=a[j];
                      end;
 for i:=1 to t-2 do
  for j:=i to t-1 do
   if b[i].s+b[j].s<s then begin
                    cauta(j,t);
                    if b[i].s+b[j].s+b[k].s=s then begin
                         write(fo,b[i].x,' ',b[i].y,' ',b[j].x,' ',b[j].y,' ',b[k].x,' ',b[k].y);
                         close(fo);
                          exit;
                           end;
                    end
    else break;
 write(fo,'-1');
close(fo);
end.