Cod sursa(job #169044)

Utilizator ProtomanAndrei Purice Protoman Data 31 martie 2008 23:36:02
Problema Loto Scor 5
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.91 kb
const bz=3500001;

type loto=record
          a1,a2,a3,a4:longint;
     end;
     point=^nod;
     nod=record
         el:longint;
         ua:point;
     end;

var f1,f2:text;
    ind,x,i,j,g,nr,n,s,m,dimh:longint;
    ok:boolean;
    z:array[1..100] of longint;
    a:array[1..1000000] of loto;
    l:array[0..bz+2] of point;

procedure clad(loc,x:longint);
var p:point;
begin
        new(p);
        p^.el:=x;
        p^.ua:=l[loc];
        l[loc]:=p;
end;

procedure cauta(loc:longint);
var p:point;
begin
        p:=l[loc];
        while p<>nil do
        begin
                if a[p^.el].a1+a[i].a1=s then
                begin
                        j:=p^.el;
                        ok:=true;
                        break;
                end
                else p:=p^.ua;
        end;
end;

begin
        assign(f1,'loto.in');
        reset(f1);
        assign(f2,'loto.out');
        rewrite(f2);
        read(f1,n,s);
        for i:=1 to n do
                read(f1,z[i]);
        for i:=1 to n do
                for j:=i to n do
                        for g:=j to n do
                        begin
                                inc(ind);
                                a[ind].a1:=z[i]+z[j]+z[g];
                                a[ind].a2:=z[i];
                                a[ind].a3:=z[j];
                                a[ind].a4:=z[g];
                                clad(a[ind].a1 mod bz,ind);
                        end;
        ok:=false;
        for i:=1 to ind do
        begin
                cauta((s-a[ind].a1) mod bz);
                if ok=true then
                begin
                        writeln(f2,a[i].a2,' ',a[i].a3,' ',a[i].a4,' ',a[j].a2,' ',a[j].a3,' ',a[j].a4);
                        break;
                end
        end;
        if ok=false then
                writeln(f2,-1);
        close(f1);
        close(f2);
end.