Pagini recente » Cod sursa (job #781012) | Cod sursa (job #1933820) | Cod sursa (job #2184123) | Cod sursa (job #1938293) | Cod sursa (job #2440472)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cri.in");
ofstream fout("cri.out");
const int nmax = 505;
int di[4] = {1, -1, 0, 0};
int dj[4] = {0, 0, 1, -1};
int matrice[nmax][nmax], n, m, x, y, z, k, a[nmax][nmax];
long long maxim, suma, minim = 8005;
void read()
{
fin >> n >> m >> x >> y;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
fin >> matrice[i][j];
}
void zona1()
{
suma = 0, k = 0;
for(int i = 1; i <= x; ++i)
for(int j = 1; j <= y; ++j)
{
suma += matrice[i][j];
}
if(x % 2 == 0 && y % 2 == 0)
{
int pozmin = nmax + 5;
for(int i = 1; i <= x; ++i)
for(int j = 1; j <= y; ++j)
{
if(matrice[i][j] < minim && (i + j) % 2 != 0)
{
pozmin = matrice[x][y];
}
}
k = x*y - 1;
if(k < minim && (suma - pozmin) > maxim)
{
minim = k;
maxim = suma - pozmin;
z = 1;
}
}
else
{
k = x*y;
if(suma > maxim && k < minim)
{
minim = k, maxim = suma;
z = 1;
}
}
}
void zona2()
{
suma = 0, k = 0;
for(int i = 1; i <= x; ++i)
for(int j = y; j <= m; ++j)
{
suma += matrice[i][j];
}
if(x % 2 == 0 && m % 2 == 0)
{
int pozmin = nmax + 5;
for(int i = 1; i <= x; ++i)
for(int j = y; j <= m; ++j)
{
if(i + j % 2 != 0)
{
if(matrice[i][j] < pozmin)
pozmin = matrice[i][j];
}
}
k = x*(m - x) - 1;
if(k < minim && (suma - pozmin) > maxim)
{
minim = k;
maxim = suma - pozmin;
z = 2;
}
}
else
{
k = x*(m - x);
if(suma > maxim && k < minim)
{
minim = k, maxim = suma;
z = 2;
}
}
}
void zona3()
{
suma = 0, k = 0;
for(int i = x; i <= n; ++i)
for(int j = 1; j <= y; ++j)
{
suma += matrice[i][j];
}
if(n % 2 == 0 && y % 2 == 0)
{
int pozmin = nmax + 5;
for(int i = x; i <= n; ++i)
for(int j = 1; j <= y; ++j)
{
if(matrice[i][j] < pozmin && (i + j) % 2 != 0)
{
pozmin = matrice[i][j];
}
}
k = m*y - 1;
if(k < minim && (suma - pozmin) > maxim)
{
minim = k;
maxim = suma - pozmin;
z = 3;
}
}
else
{
k = m*y;
if(suma > maxim && k < minim)
{
minim = k, maxim = suma;
z = 3;
}
}
}
void zona4()
{
suma = 0, k = 0;
for(int i = x; i <= n; ++i)
for(int j = y; j <= m; ++j)
{
suma += matrice[i][j];
}
if(m % 2 == 0 && x % 2 == 0)
{
int pozmin = nmax + 5;
for(int i = x; i <= n; ++i)
for(int j = y; j <= m; ++j)
{
if(matrice[i][j] < pozmin && (i + j) % 2 != 0)
{
pozmin = matrice[i][j];
}
}
k = m*x - 1;
if(k < minim && (suma - pozmin) > maxim)
{
minim = k;
maxim = suma - pozmin;
z = 4;
}
}
else
{
k = m*x;
if(suma > maxim && k < minim)
{
minim = k, suma = maxim;
z = 4;
}
}
}
int main()
{
read();
zona1();
zona2();
zona3();
zona4();
fout << z << " " << maxim << " " << minim;
return 0;
}