Cod sursa(job #2038257)

Utilizator maria_sinteaMaria Sintea maria_sintea Data 13 octombrie 2017 15:48:45
Problema Struti Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <cstdio>
#define N 1005
#define INF 8005

using namespace std;

int n, m, p, dx, dy, mat[N][N], mini=INF, maxi;
int minim=INF, nr;

void citire()
{
    scanf("%d %d %d\n", &n, &m, &p);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            scanf("%d ", &mat[i][j]);
}

void parcurgere_lung(int sti, int stj)
{
    for(int i=sti;i<sti+dx;i++)
        for(int j=stj;j<stj+dy;j++)
        {
            if(mini>mat[i][j])
                mini=mat[i][j];
            if(maxi<mat[i][j])
                maxi=mat[i][j];
        }
}

void parcurgere_latime(int sti, int stj)
{
    for(int i=sti;i<sti+dy;i++)
        for(int j=stj;j<stj+dx;j++)
        {
            if(mini>mat[i][j])
                mini=mat[i][j];
            if(maxi<mat[i][j])
                maxi=mat[i][j];
        }
}

void parcurgere()
{
    for(int i=0;i<=n-dx;i++)
        for(int j=0;j<=n-dy;j++)
        {
            parcurgere_lung(i, j);
//            printf("%d-%d=%d\n", maxi, mini, maxi-mini);
            int x=maxi-mini;
            maxi=0; mini=INF;
            if(x==minim)
                nr++;
            else
                if(x<minim)
                {
                    nr=1;
                    minim=x;
                }
        }
    if(dx!=dy)
        for(int i=0;i<=n-dy;i++)
            for(int j=0;j<=n-dx;j++)
            {
                parcurgere_latime(i, j);
//                printf("%d-%d=%d\n", maxi, mini, maxi-mini);
                int x=maxi-mini;
                maxi=0; mini=INF;
                if(x==minim)
                    nr++;
                else
                    if(x<minim)
                    {
                        nr=1;
                        minim=x;
                    }
            }
}

int main()
{
    freopen("struti.in", "r", stdin);
    freopen("struti.out", "w", stdout);

    citire();
    for(int t=0;t<p;t++)
    {
        scanf("%d %d\n", &dx, &dy);
        parcurgere();
        printf("%d %d\n", minim, nr);
    }
    return 0;
}