[C++]白駿1654:網線を切る
7107 ワード
#include <iostream>
#include <vector>
using namespace std;
int K, N;
vector<int> line;
int main(int argc, char **argv){
int x, maxN = 0;
scanf("%d %d",&K,&N);
for(int i=0; i<K; i++){
scanf("%d", &x);
line.push_back(x);
maxN = max(maxN, x); // 최대값 저장
}
long long left = 1, mid, right = maxN;
long long result = 0, tmp; // 초기화해주기
while(left <= right){
mid = (left + right) / 2;
tmp = 0;
for(int i=0; i<line.size(); i++){
tmp += line[i] / mid;
}
if(tmp >= N){
left = mid + 1;
result = max(result, mid); // 값 갱신 - 랜선의 최대길이
} else {
right = mid - 1;
}
}
printf("%lld", result);
return 0;
}
本来はバイナリ検索で解くのではなく,中間値−1で解く.もちろん一時停止です...だからバイナリ探索で解決することにした.あと2つ気をつけなければならないことがあります.
だから、N個以上の場合は、どれも救える.
:そのため、ローカルエリアネットワークの最大長を更新し、求めた値に基づいてバイナリ検索を続行します.
Reference
この問題について([C++]白駿1654:網線を切る), 我々は、より多くの情報をここで見つけました https://velog.io/@lamknh/C-백준-1654-랜선-자르기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol