Cod sursa(job #136959)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 16 februarie 2008 17:53:04
Problema Loto Scor 5
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.04 kb
type trip=record
       a,b,c,ss:longint;
     end;
const nmax=101;
      mmax=1030301;
var fi,fo:text;
    su:array[1..mmax]of trip;
    n,s,i,l,j,k:longint;
    nr:array[1..nmax]of longint;
    ap:array[1..3000000]of longint;
function part(st,dr:longint):longint;
var i,j,s:longint;
    aux:trip;
begin
  i:=st; j:=dr; s:=-1;
  while i<j do
    begin
      if su[i].ss>su[j].ss then
        begin
          aux:=su[i];
          su[i]:=su[j];
          su[j]:=aux;
          s:=-s;
        end;
      if s=1 then inc(i)
             else dec(j);
    end;
  part:=i;
end;
procedure qsort(st,dr:longint);
var p:longint;
begin
  if st<dr then
    begin
      p:=part(st,dr);
      qsort(st,p-1);
      qsort(p+1,dr);
    end;
end;
function find(vl,poz:longint):longint;
var st,dr,mij:longint;
begin
  if su[poz].ss>vl then
    begin
      st:=1;
      dr:=poz-1;
    end
  else
    begin
      st:=poz;
      dr:=l;
    end;
  while st<=dr do
    begin
      mij:=(st+dr) shr 1;
      if su[mij].ss=vl then
        begin
          find:=mij;
          exit;
        end
      else
        if su[mij].ss>vl then dr:=mij-1
                         else st:=mij+1;
    end;
  find:=0;
end;
procedure solve;
var aux,i:longint;
begin
  for i:=1 to l do
    begin
      {aux:=find(s-su[i].ss,i);}
      if ap[s-su[i].ss]<>0 then
        begin
          aux:=ap[s-su[i].ss];
          write(fo,su[i].a,' ',su[i].b,' ',su[i].c,' ');
          write(fo,su[aux].a,' ',su[aux].b,' ',su[aux].c);
          exit;
        end;
    end;
  write(fo,-1);
end;
begin
  assign(fi,'loto.in'); reset(fi);
  assign(fo,'loto.out'); rewrite(fo);
  read(fi,n,s);
  for i:=1 to n do
    read(fi,nr[i]);
  l:=0;
  for i:=1 to n do
    for j:=i to n do
      for k:=j to n do
        begin
          inc(l);
          su[l].ss:=nr[i]+nr[j]+nr[k];
          ap[su[l].ss]:=l;
          su[l].a:=nr[i];
          su[l].b:=nr[j];
          su[l].c:=nr[k];
        end;
  qsort(1,l);
  solve;
  close(fi);
  close(fo);
end.