Thứ Năm, 5 tháng 5, 2022

TGV874 PASCAL

const
        fin='tgv874.inp';
        fon='tgv874.out';
var
        i,n,k,j,ans,l,r,mid:longint;
        a,b,c,d,f:array [0..100000] of int64;

procedure sort(l,r:longint);
var     i,j,x,t:longint;
begin
        i:=l;j:=r;
        x:=a[random(r-l)+l+1];
        repeat
                while x>a[i] 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;
        until i>j;
        if i<r then sort(i,r);
        if l<j then sort(l,j);
end;

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

function chat_min(i,j,x:longint):longint;
var l,r,mid,kq:longint;
begin
        kq:=0;
        l:=i;r:=j;
        while l<=r do
        begin
                mid:=(l+r) div 2;
                if (a[mid]>=x) then
                begin
                        if a[mid]=x then
                                kq:=mid;
                        r:=mid-1;
                end
                else
                        l:=mid+1;
        end;
        exit(kq);
end;





procedure giai;
var left,right,res:longint;
begin
        sort(1,n);
        res:=0;
        for i:=1 to n do
                for j:=1 to n do
                begin
                        left:=chat_min(1,n,b[i]+c[j]);
                        right:=chat_max(1,n,b[i]+c[j]);
                        if left>0 then res:=res+right-left+1;
                        left:=chat_min(1,n,abs(b[i]-c[j]));
                        right:=chat_max(1,n,abs(b[i]-c[j]));
                        if left>0 then res:=res+right-left+1;
                end;
        write(res);
end;
begin
assign(input,fin);reset(input);
assign(output,fon);rewrite(output);
readln(n);
for i:=1 to n do
        begin
        read(a[i]);
        a[i]:=a[i]*a[i];
        end;
for i:=1 to n do
        begin
        read(b[i]);
        b[i]:=b[i]*b[i];
        end;
for i:=1 to n do
        begin
        read(c[i]);
        c[i]:=c[i]*c[i];
        end;
        giai;
        //writeln(ans);
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.