Description
Input
Output
Sample Input
4 3
4 3 3
5 1 6
2 6 1
3 2 9
Sample Output
4.4286
Data Constraint
Hint
分析:这道题顺推直接找出该不该加上第i个金矿显然很困难,所以这题逆着想,最值问题,可以用二分枚举答案,判断答案的合法性,求每列金矿取i个的最大值,最后答案>=0则合法。
#include <bits/stdc++.h>
using namespace std;
int n,h;
vector <int> q[100001];
double t,l,r;
bool check (double mid)
{
mid=-mid;
double sum=0,f=0,maxx;
for (int i=1;i<=n;i++)
{
f=0;maxx=mid;
for (int j=0;j<q[i].size();j++)
{
f+=q[i][j]+mid;
maxx=max(maxx,f);
}
sum+=maxx;
}
if (sum>=0)
return 1;
else return 0;
}
int main()
{
cin>>n>>h;
for (int i=1;i<=n;i++)
for (int j=1;j<=h;j++)
{
cin>>t;
q[i].push_back(t);
r=max(r,t);
}
while (l+1e-5<r)
{
double mid=(l+r)/2;
if (check(mid)) l=mid;
else r=mid;
}
printf ("%.4lf\n",l);
}