Cod sursa(job #494)

Utilizator Programmer01Mierla Laurentiu Marian Programmer01 Data 11 decembrie 2006 13:44:13
Problema Loto Scor 45
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.28 kb
program loto;
var a:array[1..100] of longint;
    d:array[1..1000000,1..4] of longint;
    n,s,i,j,k,m,aux,suma:longint;
    f:text;
function pivot(i,j:longint):longint;
var di,dj:0..1;
    x,y:longint;
begin
di:=0;
dj:=1;
while i<j do begin
if d[i,1]>d[j,1] then begin
for y:=1 to 4 do
begin
x:=d[i,y];
d[i,y]:=d[j,y];
d[j,y]:=x;
end;
x:=di;
di:=dj;
dj:=x;
end;
i:=i+di;
j:=j-dj;
end;
pivot:=i;
end;
procedure sort(i,j:longint);
var p:longint;
begin
if i<j then begin
p:=pivot(i,j);
sort(i,p-1);
sort(p+1,j);
end;
end;
begin
assign(f,'loto.in');
reset(f);
readln(f,n,s);
for i:=1 to n do
read(f,a[i]);
close(f); 
m:=0;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
if a[i]+a[j]+a[k]<s then
begin
m:=m+1;
d[m,1]:=a[i]+a[j]+a[k];
d[m,2]:=a[i];
d[m,3]:=a[j];
d[m,4]:=a[k];
end;
sort(1,m);
i:=0;
repeat
i:=i+1;
suma:=s-d[i,1];
j:=i;
k:=m;
repeat
aux:=(j+k) div 2;
if suma<>d[aux,1] then
if suma<d[aux,1] then k:=aux-1
else if suma>d[aux,1] then j:=aux+1;
until (d[aux,1]=suma) or (j>=k);
until (d[(j+k) div 2,1]=suma)or(i=m);
assign(f,'loto.out');
rewrite(f); 
if d[(j+k) div 2,1]<>suma then write(f,'-1')
else 
write(f,d[(j+k) div 2,2],' ',d[(j+k) div 2,3],' ',d[(j+k) div 2,4],' ',d[i,2],' ',d[i,3],' ',d[i,4]);
close(f);
end.