Cod sursa(job #1132710)

Utilizator DjokValeriu Motroi Djok Data 3 martie 2014 20:43:08
Problema Loto Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.11 kb
 type troll=record
       suma,x,y,z:longint;
      end;

var a:array[1..101] of longint;
    loto:array[1..5000001] of troll;
    i,j,k,n,tt,g,s,left,right,pivot:longint;

    procedure swap(var x,y:troll);
     var aux:troll;
      begin
       aux:=x;
       x:=y;
       y:=aux;
      end;

    procedure qsort(left,right:longint);
     var i,j,pivot:longint;
      begin
       i:=left; j:=right; pivot:=loto[(left+right) div 2].suma;
        repeat
         while loto[i].suma<pivot do inc(i);
         while loto[j].suma>pivot do dec(j);
          if i<=j then begin
                        swap(loto[i],loto[j]);
                        inc(i);
                        dec(j);
                       end;
        until i>j;
        if i<right then qsort(i,right);
        if left<j then qsort(left,j);
      end;

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

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

     for i:=1 to n do
      for j:=i to n do
       for k:=j to n do
        if a[i]+a[j]+a[k]<s then begin
                                  inc(tt);
                                  loto[tt].suma:=a[i]+a[j]+a[k];
                                  loto[tt].x:=a[i];
                                  loto[tt].y:=a[j];
                                  loto[tt].z:=a[k];
                                 end;
       qsort(1,tt); left:=1; right:=tt;

        while (loto[left].suma+loto[right].suma<>s) and (left<=right) do
         if loto[left].suma+loto[right].suma>s then dec(right)
                                               else inc(left);

        if loto[left].suma+loto[right].suma=s then begin
                                                    write(loto[left].x,' ',loto[left].y,' ',loto[left].z);
                                                    write(loto[right].x,' ',loto[right].y,' ',loto[right].z);
                                                    end
                                              else writeln('-1');








close(input);
close(output);
{Totusi este trist in lume}
end.