Cod sursa(job #630302)

Utilizator darrenRares Buhai darren Data 5 noiembrie 2011 11:05:07
Problema Balans Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#include <iomanip>

using namespace std;

const int SIZE = 301;

int N, M, R, C;
int A[SIZE][SIZE], S[SIZE][SIZE];
int 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];
	
	N = N * 2 - 2, M = M * 2 - 2;
	for (int i = 1; i <= N; ++i)
		for (int j = 1; j <= M; ++j)
			S[i][j] = S[i - 1][j] + S[i][j - 1] - S[i - 1][j - 1] + A[i][j];
	
	for (int i = R; i <= N; ++i)
		for (int j = C; j <= M; ++j)
			result = max(result, S[i][j] - S[i][j - C] - S[i - R][j] + S[i - R][j - C]);
	
	double now = 1.0 * result / R * C;
	fout << fixed << setprecision(3) << now;
	
	
	fin.close();
	fout.close();
}