Pagini recente » Cod sursa (job #2186281) | Cod sursa (job #2851684) | Cod sursa (job #1467991) | Cod sursa (job #16548) | Cod sursa (job #801760)
Cod sursa(job #801760)
#include <iostream>
#include <iomanip>
#include <fstream>
#define DN 305
using namespace std;
int n,m,r,c,mc[DN][DN],sc[DN][DN];
double v[DN];
bool check(double x) {
for(int i1=1; i1<=n; ++i1) for(int i2=i1+r-1; i2<=n; ++i2) {
for(int i=1; i<=m; ++i) v[i]=sc[i2][i]-sc[i1-1][i]-x*(i2-i1+1)+v[i-1];
if(v[c]>=0) return 1;
double mi=1000000000;
for(int i=c+1; i<=m; ++i) {
mi=min(mi,v[i-c]);
if(v[i]-mi>=0) return 1;
}
}
return 0;
}
int main()
{
ifstream f("balans.in");
ofstream g("balans.out");
f>>n>>m>>r>>c;
for(int i=1; i<=n; ++i) for(int j=1; j<=m; ++j) {
f>>mc[i][j];
mc[i+n][j]=mc[i][j+m]=mc[i+n][j+m]=mc[i][j];
}
n<<=1; m<<=1;
for(int i=1; i<=n; ++i) for(int j=1; j<=m; ++j) sc[i][j]=sc[i-1][j]+mc[i][j];
double ls=1,ld=1000000000,m;
for(int i=1; i<=50; ++i) {
m=(ls+ld)*0.5;
if(check(m)) ls=m;
else ld=m;
}
g<<fixed<<setprecision(3)<<ls;
return 0;
}