Cod sursa(job #630305)

Utilizator darrenRares Buhai darren Data 5 noiembrie 2011 11:18:08
Problema Balans Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <iomanip>

using namespace std;

const int SIZE = 301;
const double eps = 1e-10;

int N, M, R, C;
int A[SIZE][SIZE], S[SIZE][SIZE];
double result;

int main()
{
	ifstream fin("balans.in");
	ofstream fout("balans.out");
	
	
	fin >> N >> M >> R >> C;
	for (int i = 1; i <= N; ++i)
	{
		for (int j = 1; j <= M; ++j)
			fin >> A[i][j];
		for (int j = M + 1; j <= 2 * M - 2; ++j)
			A[i][j] = A[i][j - M];
	}
	for (int i = N + 1; i <= 2 * N - 2; ++i)
		for (int j = 1; j <= 2 * M - 2; ++j)
			A[i][j] = A[i - N][j];
	
	for (int i = 1; i <= N * 2 - 2; ++i)
		for (int j = 1; j <= M * 2 - 2; ++j)
			S[i][j] = S[i - 1][j] + S[i][j - 1] - S[i - 1][j - 1] + A[i][j];
	
	for (int in = R; in <= N; ++in)
		for (int jn = C; jn <= M; ++jn)
			for (int i = in; i <= N * 2 - 2; ++i)
				for (int j = jn; j <= M * 2 - 2; ++j)
					if (result * in * jn - 1.0 * (S[i][j] - S[i][j - jn] - S[i - in][j] + S[i - in][j - jn]) < -eps)
						result = 1.0 * (S[i][j] - S[i][j - jn] - S[i - in][j] + S[i - in][j - jn]) / (in * jn);
	
	fout << fixed << setprecision(3) << result;
	
	
	fin.close();
	fout.close();
}