Cod sursa(job #999528)

Utilizator andreimaresuMaresu Andrei andreimaresu Data 20 septembrie 2013 17:28:39
Problema Struti Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.27 kb
#include<iostream>
#include<stdio.h>

using namespace std;

int main()
{
    freopen("struti.in","r",stdin);
    freopen("struti.out","w",stdout);
    int n,m,p,min,nr,minp,maxp,i,j,k,l,x,y,a;
    cin >> m >> n >> p;
    int mat[m][n];
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            cin >> mat[i][j];
        }
    }
    for(a=0;a<p;a++)
    {
        cin >> x >> y;
        min=8000;
        nr=0;
        for(i=0;i<=m-x;i++)
        {
            for(j=0;j<=n-y;j++)
            {
                minp=mat[i][j];
                maxp=mat[i][j];
                for(k=i;k<i+x;k++)
                {
                    for(l=j;l<j+y;l++)
                    {
                        if(mat[k][l]>maxp)
                        {
                            maxp=mat[k][l];
                        }
                        else if(mat[k][l]<minp)
                        {
                            minp=mat[k][l];
                        }

                    }
                }
                if(min>maxp-minp)
                {
                    min=maxp-minp;
                    nr=1;
                }
                else if (min==(maxp-minp))
                {
                    nr++;
                }
            }
        }
        if(x!=y)
        {
            for(i=0;i<=m-y;i++)
            {
            for(j=0;j<=n-x;j++)
            {
                minp=mat[i][j];
                maxp=mat[i][j];
                for(k=i;k<i+y;k++)
                {
                    for(l=j;l<j+x;l++)
                    {
                        if(mat[k][l]>maxp)
                        {
                            maxp=mat[k][l];
                        }
                        else if(mat[k][l]<minp)
                        {
                            minp=mat[k][l];
                        }

                    }
                }
                if(min>maxp-minp)
                {
                    min=maxp-minp;
                    nr=1;
                }
                else if (min==(maxp-minp))
                {
                    nr++;
                }
            }
        }
        }
        cout << min << " " << nr << endl;
    }
    return 0;
}