Cod sursa(job #2440472)

Utilizator Ionut28Porumb Palincas Ionut Ionut28 Data 18 iulie 2019 15:15:00
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 3.88 kb
#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;
}