Cod sursa(job #135333)

Utilizator DonPushmeMilitaru Adrian DonPushme Data 13 februarie 2008 16:35:53
Problema Loto Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.73 kb
type vec=array[1..1000000] of longint;
var v,sume:vec;
    m,i,j,k,i1,j1,k1,nr,s,n:longint;
    ok:boolean;

procedure QuickSort(var A: vec; Lo, Hi: Integer);

procedure Sort(l, r: Integer);
var
  i, j, x, y: integer;
begin
  i := l; j := r; x := a[(l+r) DIV 2];
  repeat
    while a[i] < x do i := i + 1;
    while x < a[j] do j := j - 1;
    if i <= j then
    begin
      y := a[i]; a[i] := a[j]; a[j] := y;
      i := i + 1; j := j - 1;
    end;
  until i > j;
  if l < j then Sort(l, j);
  if i < r then Sort(i, r);
end;

begin {QuickSort};
  Sort(Lo,Hi);
end;

function cautare(x,li,lf:longint):boolean;
begin
while li<lf do
      begin
      m:=(li+lf) div 2;
      if x<sume[m] then lf:=m-1
                   else li:=m+1;
      cautare:=(x=sume[m]);
      end;
end;

begin {main}

assign(input,'loto.in');
assign(output,'loto.out');

reset(input);
rewrite(output);

readln(n,s);
for i :=1 to n do
      read(v[i]);

nr:=0;
for i:=1 to n do
    for j:=1 to n do
        for k:=1 to n do
            begin
            inc(nr);
            sume[nr]:=v[i]+v[j]+v[k];
            end;

quicksort(sume,1,nr);

ok:=false;
for i:=1 to n do
    for j:=1 to n do
        for k:=1 to n do
            if cautare(s-(v[i]+v[j]+v[k]),1,nr) then
               for i1:=1 to n do
                   for j1:=1 to n do
                       for k1:=1 to n do
                           if s=v[i]+v[j]+v[k]+v[i1]+v[j1]+v[k1] then
                              begin
                              ok:=true;
                              write(v[i],' ',v[j],' ',v[k],' ',v[i1],' ',v[j1],' ',v[k1]);
                              exit;
                              end;
if not(ok) then write('-1');
end.