Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 최소 거리가 최대화되도록 k 요소 배치


이 문제에서는 같은 선에 있는 n개의 점 배열이 제공됩니다. 우리의 임무는 배열의 k 요소를 요소 사이의 최소 거리가 최대화되도록 배치하는 것입니다.

문제를 이해하기 위해 예를 들어보겠습니다.

입력 - 배열 ={}

출력 -

이 문제를 해결하려면 가능한 최대 최소 거리를 찾아야 합니다. 이러한 문제에 대해 먼저 주어진 배열을 정렬한 다음 중간에 솔루션을 얻을 때까지 이진 검색을 수행해야 합니다.

예시

솔루션 구현을 보여주는 프로그램,

#include <bits/stdc++.h>
using namespace std;
bool canGenerateResult(int mid, int arr[], int n, int k) {
   int pos = arr[0];
   int elements = 1;
   for (int i=1; i<n; i++){
      if (arr[i] - pos >= mid){
         pos = arr[i];
         elements++;
         if (elements == k)
         return true;
      }
   }
   return 0;
}
int maxMinDist(int arr[], int n, int k) {
   sort(arr,arr+n);
   int res = -1;
   int left = arr[0], right = arr[n-1];
   while (left < right){
      int mid = (left + right)/2;
      if (canGenerateResult(mid, arr, n, k)){
         res = max(res, mid);
         left = mid + 1;
      }
      else
         right = mid;
   }
   return res;
}
int main() {
   int arr[] = {3, 5, 6, 9, 1, 8};
   int n = sizeof(arr)/sizeof(arr[0]);
   int k = 3;
   cout<<"The maximized minimum distance is : "<<maxMinDist(arr, n, k);
   return 0;
}

출력

The maximized minimum distance is : 4