NKSTEP - Chuyển

Tác giả: ladpro98

Ngôn ngữ: Pascal

program nkstep;
uses    math;
const   maxsqrt=46340;
        fi='';
var     A:ARRAY[1..maxsqrt] of longint;
        inp:text;
        n,x,y,res:longint;
procedure init;
var     i:longint;
begin
        for i:=1 to maxsqrt do
        a[i]:=sqr(i);
end;

function find(key:longint):longint;
var     l,r,m,k:longint;
begin
        l:=1;
        r:=maxsqrt;
        while l<=r do
        begin
                m:=(l+r) shr 1;
                if a[m]<=key then
                begin
                        k:=m;
                        l:=m+1;
                end
                else r:=m-1;
        end;
        exit(k);
end;

procedure open;
begin
        assign(inp,fi);
        reset(inp);

end;

procedure process;
var     t,p,pos:longint;
begin
        readln(inp,t);
        for p:=1 to t do
        begin
                readln(inp,x,y);
                n:=abs(x-y);
                pos:=find(n);
                res:=(pos shl 1-1)+((n-a[pos]) div pos);
                if (n-a[pos]) mod pos>0 then inc(res);
                writeln(res);
        end;
        close(inp);
end;

begin
        open;
        init;
        process;
end.

Download