Hướng dẫn giải của Chuyển


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Lưu ý: Các code mẫu dưới đây chỉ mang tính tham khảo và có thể không AC được bài tập này

Code mẫu của flashmt

var i,x,y,t,n,k:longint;
begin
     readln(t);
     for i:=1 to t do
     begin
          readln(x,y);
          n:=abs(y-x);
          k:=trunc(sqrt(n));
          while k*(k+1)<n do inc(k);
          dec(k);
          if n-k*(k+1)>k+1 then writeln(k*2+2)
          else writeln(k*2+1);
     end;
end.

Code mẫu của happyboy99x

#include <cstdio>

/* Goi a[i] la k/c co the di chuyen bang i buoc di 
    a[0] = 0;
    a[i] = a[i-1] + ( i + 1 ) / 2 */

int main() {
    int te;
    int m, n;
    int dis; //distance
    int steps;
    scanf( "%d", &te );
    for ( int t = 0; t < te; ++t ) {
        scanf( "%d %d", &m, &n );
        dis = n > m ? n - m : (m-n);
        int len = 0, i = 0;
        steps = 0;
        while ( len < dis ) {
            len += ( i + 1 ) / 2;
            ++i; ++steps;
        }
        if ( dis != 0 ) --steps;
        printf( "%d\n", steps );
    }
}

Code mẫu của ladpro98

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.

Code mẫu của RR

{$R+,Q+}
{$Mode objFPC}
uses math;
const
  FINP='';
  FOUT='';
  oo=50001;
var
  f1,f2:text;
  x,y,i,test,kq,dist:longint;
procedure openF;
begin
  assign(f1,FINP); reset(f1);
  assign(f2,FOUT); rewrite(f2);
end;
procedure closeF;
begin
  close(f1);
  close(f2);
end;
function find:longint;
var
  l,r,mid,kq:longint;
begin
  l:=1; r:=oo; kq:=0;
  repeat
    mid:=(l+r)>>1;
    if sqr(mid)<=dist then
      begin
        kq:=mid;
        l:=mid+1;
      end
    else r:=mid-1;
  until l>r;
  exit(kq);
end;
procedure solve;
var
  x,i:longint;
begin
  x:=find;
  dist-=sqr(x); kq:=x<<1-1;
  i:=x;
  while dist>0 do
    begin
      if dist>=i then begin dist-=i; kq+=1; end
      else dec(i);
    end;
end;
begin
  openF;
  read(f1,test);
  for test:=1 to test do
    begin
      read(f1,x,y);
      if x=y then
        begin
          writeln(f2,0);
          continue;
        end;
      dist:=abs(x-y);
      solve;
      writeln(f2,kq);
    end;
  closeF;
end.

Code mẫu của hieult

#include <stdio.h>
#include <math.h>
main()
{
long n,A[200000],a,b,m;
scanf("%ld",&n);
for(int i=0;i<n;i++)
  {
  scanf("%ld %ld",&a,&b);
  if(a-b>0)
    A[i]=a-b;
  else
    A[i]=b-a;
  }
for(int i=0;i<n;i++)
  {
  m=sqrt(A[i]-1)+1;
  printf("%ld\n",2*m-1-(m*m-A[i])/m);
  }
}

Code mẫu của khuc_tuan

import math

def process(n):
    if n==0:
        print 1000
        return
    i = int(math.sqrt(n))
    s = i * (i+1) / 2
    r = 1000000000
    while s+s-i<=n:
        h = n - s - s + i
        t = 2 * i - 1
        if (h%i)==0:
            t += h / i
        else:
            t += h / i + 1
        r = min( r, t)
        i += 1
        s += i
    print r

st = input()
for i in range(st):
    [x,y] = [int(k) for k in raw_input().split(" ")]
    process(abs(y-x))

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.