Cod sursa(job #133118)

Utilizator you_reheroMihai Gojinetchi you_rehero Data 7 februarie 2008 17:04:42
Problema Loto Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.02 kb
var fi,fo:text;
    n,s,i,j,k,l,m,su:longint;
    a:array[1..100]of longint;
function part(st,dr:integer):integer;
var i,j,aux,s:longint;
begin
  i:=st; j:=dr; s:=-1;
  while i<j do
    begin
      if a[i]<a[j] then
        begin
          aux:=a[i];
          a[i]:=a[j];
          a[j]:=aux;
          s:=-s;
        end;
      if s=1 then inc(i)
             else dec(j);
    end;
  part:=i;
end;
procedure qsort(st,dr:integer);
var p:integer;
begin
  if st<dr then
    begin
      p:=part(st,dr);
      qsort(st,p-1);
      qsort(p+1,dr);
    end;
end;
function find(st,dr,vl:integer):integer;
var mij:integer;
begin
  find:=-1;
  while st<=dr do
    begin
      mij:=(st+dr) shr 1;
      if a[mij]=vl then
        begin
          find:=mij;
          exit;
        end
      else
        if a[mij]>vl then st:=mij+1
                     else dr:=mij-1;
    end;
end;
procedure solve;
var aux:integer;
begin
  su:=0;
  for i:=1 to n do
    begin
      su:=su+a[i];
      for j:=1 to n do
        begin
          su:=su+a[j];
          for k:=1 to n do
            begin
              su:=su+a[k];
              for l:=1 to n do
                begin
                  su:=su+a[l];
                  for m:=1 to n do
                    begin
                      su:=su+a[m];
                      aux:=find(1,n,s-su);
                      if aux<>-1 then
                        begin
                          write(fo,a[i],' ',a[j],' ',a[k],' ',a[l],' ',a[m],' ',a[aux]);
                          exit;
                        end;
                      su:=su-a[m];
                    end;
                  su:=su-a[l];
                end;
              su:=su-a[k];
            end;
          su:=su-a[j];
        end;
      su:=su-a[i];
    end;
  writeln(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,a[i]);
  qsort(1,n);
  solve;
  close(fi);
  close(fo);
end.