Thứ Hai, 9 tháng 5, 2022

NDCCARD PASCAL

var     a:array [0..1000] of longint;
        n,m,kq:longint;

procedure nhap;
var i:longint;
begin
    readln(n,m);
    for i:=1 to n do read(a[i]);
end;



procedure qs(l,h:longint);
var x,i,j,t:longint;
begin
        x:=a[(l+h) div 2];
        i:=l;j:=h;
        while i<=j do
        begin
                while a[i] < x do inc(i);
                while x < a[j] do dec(j);
                if i<=j then
                begin
                        t:=a[i];
                        a[i]:=a[j];
                        a[j]:=t;
                        inc(i);dec(j);
                end;
        end;
        if L<j then qs(L,j);
        if i<H then qs(i,H);
end;


function tknp(l,r,x:longint):longint;
var m,kq:longint;
begin
        kq:=-1;
        while l<=r do
        begin
                m:=(l+r) div 2;
                if a[m]<=x then
                begin
                        kq:=m;
                        l:=m+1;
                end
                else r:=m-1;
        end;
        exit(kq);
end;

procedure xuli;
var i,j,k,max:longint;
begin
        qs(1,n);
        max:=0;
    for i:=1 to n-2 do
            for j:=i+1 to n-1 do
                begin
                    k:=tknp(j+1,n,m-a[i]-a[j]);
                        if k>-1 then
                            if a[i]+a[j]+a[k]>max then
                                          max:=a[i]+a[j]+a[k];
                end;
        writeln(max);
end;

begin
        assign(input,'ndccard.inp');reset(input);
        assign(output,'ndccard.out');rewrite(output);
        nhap;
        xuli;
end.

Không có nhận xét nào:

Đăng nhận xét

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.