2 / 2
Dec 2022

Hello good people!
This answer seems to give runtime error. Any idea why?

#include <bits/stdc++.h>
using  namespace std;
int main(){
    int t;
    cin>>t;
    while(t--){
        int n, c;
        cin>>n>>c;
        int arr[n];
        for(int i=0; i<n; i++){
            cin>>arr[i];
        }
        sort(arr, arr+n);
        int maxdiff=arr[n-1];
        int diff[maxdiff]={0};
        for(int i=0; i<maxdiff; i++){
            diff[i]=i+1;
        }


        int low=1, high=maxdiff, mid, count=0, maxi=1;
        while(low<=high){
            mid=(low+high)/2;
            // cout<< diff[mid]<<" ";
            int prev=0;
            int flag=0;
            count=1;
            for(int cur=1; cur<n; cur++){
                if(arr[cur]-arr[prev] >= diff[mid]){
                    prev=cur;
                    count++;
                }
                if(count==c) {
                    flag=1;
                    maxi=diff[mid];
                    break;
                }
            }
            if(flag==1){
                low=mid+1;
                // diff[low];
            }
            else{
                high=mid-1;
            }

        }
        cout<<maxi;
    }
    return 0;
} 
  • created

    Nov '22
  • last reply

    Dec '22
  • 1

    reply

  • 395

    views

  • 2

    users

Try this test case

1
4 3
100000000
500000000
900000000
2