Pagini recente » Problema satisfiabilităţii formulelor logice de ordinul doi | Cod sursa (job #1531129) | Cod sursa (job #1808764) | Cod sursa (job #125792) | Cod sursa (job #676827)
Cod sursa(job #676827)
#include <cstdio>
#define NMax 305
using namespace std;
int N, M, R, C, A[NMax][NMax];
double S;
void Solve ()
{
for (int i=1; i<=N+N; ++i)
{
for (int j=1; j<=M+M; ++j)
{
A[i][j]+=(A[i-1][j]+A[i][j-1]-A[i-1][j-1]);
}
}
for (int l=R; l<=N; ++l)
{
for (int c=C; c<=M; ++c)
{
for (int i=N+1; i<=N+N; ++i)
{
for (int j=M+1; j<=M+M; ++j)
{
double Sum=A[i][j]-A[i-l][j]-A[i][j-c]+A[i-l][j-c];
if (Sum>S*l*c)
{
S=Sum/((double)(l*c));
}
}
}
}
}
}
void Read ()
{
freopen ("balans.in", "r", stdin);
scanf ("%d %d %d %d", &N, &M, &R, &C);
if (R==0) R=1;
if (C==0) C=1;
for (int i=1; i<=N; ++i)
{
for (int j=1; j<=M; ++j)
{
scanf ("%d", &A[i][j]);
A[i+N][j]=A[i][j+M]=A[i+N][j+M]=A[i][j];
}
}
}
void Print ()
{
freopen ("balans.out", "w", stdout);
S=(double)((int)(S*1000))/1000.0;
printf ("%.3lf\n", S);
}
int main()
{
Read ();
Solve ();
Print ();
return 0;
}