lelouche29

Aggresive Cows Samsung

Sep 9th, 2019
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void merge(int a[], int l, int mid, int r){
  5.     int n1= mid -l +1;
  6.     int n2= r-mid;
  7.  
  8.     int b[n1], c[n2];
  9.     for(int i=0; i<n1; i++) b[i]=a[i+l];
  10.     for(int j=0; j<n2; j++) c[j]=a[mid +j +1];
  11.  
  12.     int i=0, j=0, k=l;
  13.     while(i<n1 && j<n2){
  14.         if(b[i]<=c[j]) a[k++]=b[i++];
  15.         else a[k++]=c[j++];
  16.     }
  17.  
  18.     while(i<n1) a[k++]=b[i++];
  19.     while(j<n2) a[k++]=c[j++];
  20. }
  21.  
  22.  
  23. void mergeSort(int a[],int l, int r){
  24.     if(l<r){
  25.         int mid =(l + r)/2;
  26.         //calling recursive frunctions for two subarrays
  27.         mergeSort(a, l,mid);
  28.         mergeSort(a,mid+1,r);
  29.  
  30.         //merging arrays
  31.         merge(a,l,mid,r);
  32.     }
  33. }
  34.  
  35. bool isPossible(int a[], int n, int cows, int mid){
  36.     int curPos=a[0];
  37.     int filled=1;
  38.  
  39.     for(int i=1; i<n; i++){
  40.         if(curPos+ mid <=a[i]){
  41.             curPos=a[i];
  42.             filled++;
  43.             if(filled==cows) return true;
  44.         }
  45.     }
  46.     return false;
  47. }
  48.  
  49. int findMinDist(int a[], int n, int cows){
  50.     int low=a[0], high=a[n-1];
  51.  
  52.     int res=0;
  53.     while(low< high){
  54.         int mid=(low + high)/2;
  55.  
  56.         if(isPossible(a,n, cows, mid)){
  57.             res=max(res,mid);
  58.             low=mid +1;
  59.         }else high = mid;
  60.     }
  61.     return res;
  62. }
  63.  
  64. int main() {
  65.     int t;
  66.     cin>>t;
  67.     while(t--){
  68.         int n,cows;
  69.         cin>>n>>cows;
  70.  
  71.         int a[n];
  72.         for(int i=0; i<n; i++) cin>>a[i];
  73.  
  74.         mergeSort(a,0,n-1);
  75.  
  76.         int ans=findMinDist(a,n, cows);
  77.         cout<<ans<<endl;
  78.     }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment