[ラーニングテストエンコーディング]ローカルエリアネットワークの切断
ソース:https://www.acmicpc.net/problem/1654
問題の条件が表示された場合、時間は2秒、Kは10000以下に制限されます.したがって,複雑度がO(n^2)に達することは許容されるが,この問題は二分ナビゲーションでしか解決できない.理由は次のとおりです.
特定の整数値は、データリストからのみエクスポートする必要があります. 整数値がデータ・リストに存在する値であることは保証されないため、異なる方法で値をエクスポートする必要があります. の制約条件を分析すると、これは最適な二分探索であることがわかります. この問題は従来の木の剪断問題と解法とよく似ている.コードをチェックします.
startは1,endはローカルエリアネットワーク線の最大長であり,次いで二分ナビゲーションを開始する.
ローカルエリアネットワーク線の場合、midで割った残りの値が得られるため、長さをmidで割った割合がsumに反映される.
sumの値に応じてstartまたはendの値を調整できます. sumがNより大きい場合は、もう少し短く切ることができるので、startの値は に調整することができます. sumがN未満の場合:少し短い必要があるためend値 を調整することができる.
従って、最終出力endは問題を解決することができる.
もんだいぶんせき
問題の条件が表示された場合、時間は2秒、Kは10000以下に制限されます.したがって,複雑度がO(n^2)に達することは許容されるが,この問題は二分ナビゲーションでしか解決できない.理由は次のとおりです.
特定の整数値は、
コードを確認しましょうか?
import sys
input = sys.stdin.readline
K, N = map(int, input().split())
line_length_list = []
for _ in range(K):
line_length_list.append(int(input()))
start, end = 1, max(line_length_list)
# 이분 탐색 시작
while start <= end:
sum = 0
mid = (start + end) // 2
for length in line_length_list:
sum += length // mid
if sum >= N:
start = mid + 1
else:
end = mid - 1
print(end)
昔の木切り問題と解答方法は同じだったので、簡単に説明するだけです.startは1,endはローカルエリアネットワーク線の最大長であり,次いで二分ナビゲーションを開始する.
ローカルエリアネットワーク線の場合、midで割った残りの値が得られるため、長さをmidで割った割合がsumに反映される.
sumの値に応じてstartまたはendの値を調整できます.
従って、最終出力endは問題を解決することができる.
Reference
この問題について([ラーニングテストエンコーディング]ローカルエリアネットワークの切断), 我々は、より多くの情報をここで見つけました https://velog.io/@18k7102dy/coding-test-fourth-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol