[python] BOJ 1011


答える前に


私はプログラミングがそんなに得意ではありませんが、boj解題(solidated.ac標準silver 4)を書くこともできますが、難題を解くたびに(私の基準で)考えを整理し直して、文章を書いてみます(私の文章のレベルは高くありませんが、私の文章が私に役に立つことを望んでいます).

問題の解決方法


この問題を見始めたばかりの頃、理解するのに少し時間がかかった.この問題は空間移動装置の運転回数に基づいて惑星間の距離範囲を与える.
例えば、空間移動装置の動作回数=n、2つの惑星間の距離=dである.
n=1,1 d=1 n=1のdの範囲d=1
n=2,11 d=2 n=2のdの範囲d=2
n=3121 d=4 n=3のdの範囲2n=41221 d=6 n=4のdの範囲4n=512321 d=9 n=5のdの範囲6n=6123321 d=12 n=6 dの範囲9n=71234321 d=16 n=7のdの範囲12nの値はdの範囲を決定する.上のnの値とdの関係から,nが奇数の場合,dの最値は平方数である.そして、nが偶数のときdの最値は、nが奇数のとき(dの最値)+(dsqrt dd)のパターンを示している.このモードを使用すると、d<=(dint(sqrt dint(d)^2+(dsqrt dd)、nの値はd>2で2 dsqrt dd、d=(dint(sqrt dint(d))^2でd>2、nの値は2 dsqrt-dd 1、d>(dsqrt dint(d)^2+(d\sqrt)でd>2でd*sqrt+ddとなる.以下にPythonコードがあります.

Pythonコード

n = int(input())

for x in range(n):
    x, y = map(int,input().split())
    d= y-x
    s=d
    s**=0.5
    s=int(s)
    s=s**2+s
    if d<2:
        print(1)
    elif d==2:
    	print(2)
    elif d**0.5 == int(d**0.5):
        s=d**0.5
        s=int(s)
        s=2*s-1
        print(s) 
    elif d<=s:
        s=d**0.5
        s=int(s)
        s=2*s
        print(s)
    else:
        s=d**0.5
        s=int(s)+1
        s=2*s-1
        print(s)