ABC144 C - Walk on Multiplication Table에서 배운
5906 단어 AtCoder파이썬AtCoderBeginnerContest
음, 곱셈표를 모른다. . 구그하면. 아무래도 이하의 이미지인것 같다.
문제문에 일단 곱셈표의 정의가 적혀 있다. 과연. .
N에 대한 접근 방식에서 가장 작은 것들을 대답하라. . 적인.
과연, 자꾸 쓰면 다녔다.
WalkonMultiplicationTable.py
N = int(input())
lis = []
from math import *
for n in range(1,floor(isqrt(N))+1):# 10^12 まで試す必要ない 10^6 で充分
if N%n == 0:
lis.append([n,N//n])
#print(lis)
ans = float("inf")
for a,b in lis:
ans = min(ans,a-1 +b-1)
print(ans)
#144ms
폭 우선 탐색을 사용할 수 있을까 흥분했지만, 거기까지 필요 없었다.
step1.N을 두 요소로 분해하고 조합을 나열합니다.
step2. 조합 중에서 최단 경로 찾기
10^12가 아니라 10^6까지 충분한 이유는 다음과 같습니다.
전혀 잊고 다시 풀어.
가로 이동, 하 이동의 차이를 최소화하면 이동 거리가 최소가 될 것이라고 생각했다.
abc144c.py
N = int(input())
lis = []
from math import floor
for i in range(1,floor(N**0.5)+1):
if N%i == 0:
lis.append([i,N//i,abs(i-N//i)])#[下移動、横移動、下-横] を一パックにして lis に格納
lis = sorted(lis,key=lambda t:t[2]) #lis[2] 下-横の値で sort
#print(lis)
print(lis[0][0]-1+lis[0][1]-1) #lis[0] を呼び出して答えを導出
#133ms
Reference
이 문제에 관하여(ABC144 C - Walk on Multiplication Table에서 배운), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/AKpirion/items/f819afa4f6e088731831텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)