➤ Problem Link : CISTFILL
👉 Hint : Advanced binary search with some maths
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
ll n;
ll base[50000],ht[50000],wid[50000],depth[50000];
bool f(double h,double v)
{
double vol=0;
for(ll i=0;i<n;i++)
{
if(base[i]<h)
{
if(base[i]+ht[i]<=h)
vol+=ht[i]*wid[i]*depth[i];
else
vol+=(h-base[i])*wid[i]*depth[i];
}
if(vol>=v)
return true;
}
return false;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n;
double high=0,low=0,mid,v,max=0;
for(ll i=0;i<n;i++)
{
cin>>base[i]>>ht[i]>>wid[i]>>depth[i];
if(base[i]+ht[i]>max)
max=base[i]+ht[i];
}
// cout<<max<<endl;
cin>>v;
// cout<<high<<endl;
high=10000000;
int k=100;
while(k--)
{
mid=low+(high-low)/2;
if(f(mid,v))
high=mid;
else
low=mid;
}
cout.precision(2);
if(mid<=max)
cout<<fixed<<mid<<endl;
else
cout<<"OVERFLOW"<<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!!
