[BOJ1011]Fly me to Alpha Centauri Python
1195 ワード
1.問題リンク
質問リンク
2.試合前の計画と思考
以前にkを移動した場合,k−1,k,k+1に移動できる条件下で,数列の和式を用いることを決定した.惑星に着くために、まず移動距離を減らす場所がどこなのかを考えました.
全距離の平方根sqrt(距離)まで移動距離を徐々に増やし,その後移動距離を徐々に縮小し,惑星に到達する問題を解決した.
3.解答
最初は次のように問題を解いた.
点数をつけてからコードを見て、最後の移動が1の条件は、移動する距離をy-x+1に設定し、y-xではなくy-x+1にすれば解決できる問題です.
次に等差数列の和式を用いて移動距離を求め,移動距離がk(k+1)より大きい場合はさらに1回移動するようにコードを修正する.
5.解答して分かる概念と感じ
複文を回すのもよいが,数学的に演算回数を減らすことができる場合,既知の式を用いてすぐに解くことができる.
質問リンク
2.試合前の計画と思考
以前にkを移動した場合,k−1,k,k+1に移動できる条件下で,数列の和式を用いることを決定した.惑星に着くために、まず移動距離を減らす場所がどこなのかを考えました.
全距離の平方根sqrt(距離)まで移動距離を徐々に増やし,その後移動距離を徐々に縮小し,惑星に到達する問題を解決した.
3.解答
n = int(input())
for _ in range(n):
x, y = map(int, input().split())
d = int((y-x-1)**0.5)
if y-x > d*d+d:
print(2*d+1)
else:
print(2*d)
4.問題を解くときに直面する困難と悩み最初は次のように問題を解いた.
import math
for j in range(int(input())):
x, y = map(int,input().split())
n = int(math.sqrt(y-x))
ans = 2*n - 1
temp = y-x-n**2#가고 남은 거리
i = n
while temp != 0:
if temp//i >= 0:
ans += temp//i
temp %= i
i -= 1
if i == 0:
break
print(ans)
移動開始直後の距離が減少した区間が最後の移動距離無条件1の条件であるため,whileゲートを用いて1に調整した.点数をつけてからコードを見て、最後の移動が1の条件は、移動する距離をy-x+1に設定し、y-xではなくy-x+1にすれば解決できる問題です.
次に等差数列の和式を用いて移動距離を求め,移動距離がk(k+1)より大きい場合はさらに1回移動するようにコードを修正する.
5.解答して分かる概念と感じ
複文を回すのもよいが,数学的に演算回数を減らすことができる場合,既知の式を用いてすぐに解くことができる.
Reference
この問題について([BOJ1011]Fly me to Alpha Centauri Python), 我々は、より多くの情報をここで見つけました https://velog.io/@hongcheol/BOJ-1011Fly-me-to-the-Alpha-Centauri파이썬テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol