MAIN8_C - Shake Shake Shaky - SPOJ Solution C++

  Problem Link : MAIN8_C 


👉 Hint : Sort and apply binary search

 


✅ C++ Solution :

 
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
ll arr[50000];
int n;
bool f(int mid,ll k)
{
	int i;
	ll cnt=0;
	for(i=0;i<n;i++)
	{
		if(arr[i]>=mid)
		{
		cnt+=arr[i]/mid;
		if(cnt>=k)
			return true;
		}
		
	}
	return false;
}

ll bin_search(ll low,ll high,ll k)
{
	ll mid;
	while(low<high)
	{
		mid = low+(high-low+1)/2;
		if(f(mid,k))
			low=mid;
		else
			high=mid-1;
	}
	return high;
}

int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int i;
		ll sum=0;
		ll k;
		ll ans;
		cin>>n>>k;
		for(i=0;i<n;i++)
		{
			cin>>arr[i];
			sum+=arr[i];
		}
		if(sum<k)
			ans=0;
		else
		{
		sort(arr,arr+n);
		ll low=1;
		ll high=arr[n-1];
		ans = bin_search(low,high,k);
		}
		cout<<ans<<endl;
	}


	return 0;
}

 

Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook. 

😇Happy Learning!!