白駿1300号k号
4302 ワード
質問する
インプット
solution def bi_search(start, end):
global res
mid = 0
while start <= end:
mid = (start + end) // 2
temp = 0
for i in range(1, n + 1):
temp += min(n, mid // i)
# mid // i 를 하는 이유?
# 해당행에서 mid보다 작은 수를 구하는 방법은
# mid / i 를 하면 해당 행에서 mid보다 작은 수의 개수를 찾을 수 있음
# 하지만 3*3에서 행에 최대 개수는 3인데
# 6/1 을 할 경우에는 6개가 나와서
# mid / i 의 값이n의 값보다 커질경우
# 최대개수인 n을 삽입하는것임
if temp >= m:
# mid보다 작은수의 개수가 m이랑 같거나 크면
# 더 작아져야하기 때문에 end값을 낮춰줌
res = mid
end = mid - 1
else:
start = mid + 1
n = int(input())
m = int(input())
arr = []
res = 0
bi_search(1, m)
print(res)
説明:
キー(Key)
solution def bi_search(start, end):
global res
mid = 0
while start <= end:
mid = (start + end) // 2
temp = 0
for i in range(1, n + 1):
temp += min(n, mid // i)
# mid // i 를 하는 이유?
# 해당행에서 mid보다 작은 수를 구하는 방법은
# mid / i 를 하면 해당 행에서 mid보다 작은 수의 개수를 찾을 수 있음
# 하지만 3*3에서 행에 최대 개수는 3인데
# 6/1 을 할 경우에는 6개가 나와서
# mid / i 의 값이n의 값보다 커질경우
# 최대개수인 n을 삽입하는것임
if temp >= m:
# mid보다 작은수의 개수가 m이랑 같거나 크면
# 더 작아져야하기 때문에 end값을 낮춰줌
res = mid
end = mid - 1
else:
start = mid + 1
n = int(input())
m = int(input())
arr = []
res = 0
bi_search(1, m)
print(res)
説明:
キー(Key)
def bi_search(start, end):
global res
mid = 0
while start <= end:
mid = (start + end) // 2
temp = 0
for i in range(1, n + 1):
temp += min(n, mid // i)
# mid // i 를 하는 이유?
# 해당행에서 mid보다 작은 수를 구하는 방법은
# mid / i 를 하면 해당 행에서 mid보다 작은 수의 개수를 찾을 수 있음
# 하지만 3*3에서 행에 최대 개수는 3인데
# 6/1 을 할 경우에는 6개가 나와서
# mid / i 의 값이n의 값보다 커질경우
# 최대개수인 n을 삽입하는것임
if temp >= m:
# mid보다 작은수의 개수가 m이랑 같거나 크면
# 더 작아져야하기 때문에 end값을 낮춰줌
res = mid
end = mid - 1
else:
start = mid + 1
n = int(input())
m = int(input())
arr = []
res = 0
bi_search(1, m)
print(res)
キー(Key)
EX)3~7未満の数:
11-13=3個=min(n,7/1)=3
21~23=3個=min(n,7/2)=3
31~3*2=2個=min(n,7/3)=2
すなわち、n回min(n,mid/i)
mid値以下の数を見つける
Reference
この問題について(白駿1300号k号), 我々は、より多くの情報をここで見つけました https://velog.io/@slbin-park/백준-1300번-k번째-수-파이썬テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol