Pagini recente » Istoria paginii runda/dinamica/clasament | Cod sursa (job #568427) | Cod sursa (job #252661) | Cod sursa (job #2524259) | Cod sursa (job #196612)
Cod sursa(job #196612)
type list=array[1..10000] of longint;
var f,g:text;
ss,x:list;
n,m,i,j,k,s,st,dr,mij:longint;
ok:boolean;
procedure citire;
var i:longint;
begin
assign(f,'loto.in');reset(f);
assign(g,'loto.out');rewrite(g);
read(f,n,s);
for i:=1 to n do
read(f,x[i]);
end;
procedure afisare(p:longint);
var i,j,k:longint;
begin
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
if (x[i]+x[j]+x[k]=ss[p]) then begin
write(g,x[i],' ',x[j],' ',x[k],' ');
exit;
end;
end;
procedure QuickSort(var A: List; 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;
procedure cautare;
begin
m:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do begin
inc(m);
ss[m]:=x[i]+x[j]+x[k];
end;
quicksort(ss,1,m);
ok:=false;
st:=1;
dr:=m;
while st<=dr do begin
mij:=(st+dr) div 2;
if ss[st]+ss[dr]=s then begin
ok:=true;
afisare(st);
afisare(dr);
st:=dr+1;
end
else begin
while (ss[st]+ss[dr]>s) and (dr>=1) do
dec(dr);
while (ss[st]+ss[dr]<s) and (st<=m) do
inc(st);
end;
end;
end;
begin
citire;
cautare;
if not ok then write(g,'-1');
close(f);
close(g);
end.