Cod sursa(job #3239251)

Utilizator Radu_GrigorieGrigorie Radu Stefan Radu_Grigorie Data 3 august 2024 16:30:28
Problema Oz Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 5.57 kb
#include <fstream>
using namespace std;
ifstream fin("raze.in");
ofstream fout("raze.out");
int v[200][200];
int w[200][200];
int main()
{
    int t, n, m, nrob, nrli, maxim, cnt, nr, ii, jj;
    bool ok;
    fin >> t;
    for(int q=1; q<=t; q++)
    {
        fin >> n >> m;
        nrob = 0; nrli = 0; maxim = 0; cnt = 0;
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=m; j++)
            {
                fin >> v[i][j];
                if(v[i][j]==1&&i>1&&i<n&&j>1&&j<m)
                    nrob++;
                else if(i>1&&i<n&&j>1&&j<m)
                    nrli++;
            }
        }
        if(nrob<nrli)
        {
            for(int i=2; i<n; i++)
            {
                for(int j=2; j<m; j++)
                {
                    w[i][j] = 4;
                }
            }
            for(int i=1; i<=n; i++)
            {
                for(int j=1; j<=m; j++)
                {
                    if(v[i][j]==1)
                    {
                        ii = i;
                        jj = j;
                        while(ii>1&&jj>1)
                        {
                            ii--;
                            jj--;
                            if(v[ii][jj]==1)
                                break;
                            w[ii][jj]--;
                        }
                        ii = i;
                        jj = j;
                        while(ii>1&&jj<m)
                        {
                            ii--;
                            jj++;
                            if(v[ii][jj]==1)
                                break;
                            w[ii][jj]--;
                        }
                        ii = i;
                        jj = j;
                        while(ii<n&&jj>1)
                        {
                            ii++;
                            jj--;
                            if(v[ii][jj]==1)
                                break;
                            w[ii][jj]--;
                        }
                        ii = i;
                        jj = j;
                        while(ii<n&&jj<m)
                        {
                            ii++;
                            jj++;
                            if(v[ii][jj]==1)
                                break;
                            w[ii][jj]--;
                        }
                    }
                }
            }
            for(int i=2; i<n; i++)
            {
                for(int j=2; j<m; j++)
                {
                    if(v[i][j]==0)
                    {
                        if(w[i][j]>maxim)
                        {
                            maxim = w[i][j];
                            cnt = 1;
                        }
                        else if(w[i][j]==maxim)
                        {
                            cnt++;
                        }
                    }
                }
            }
            fout << maxim << " " << cnt << "\n";
        }
        else
        {
            for(int i=2; i<n; i++)
            {
                for(int j=2; j<m; j++)
                {
                    if(v[i][j]==0)
                    {
                        nr = 0;
                        ii = i; jj = j; ok = 1;
                        while(ii>1&&jj>1)
                        {
                            ii--;
                            jj--;
                            if(v[ii][jj]==1)
                            {
                                ok=0;
                                break;
                            }
                        }
                        if(ok==1)
                            nr++;
                        ii = i; jj = j; ok = 1;
                        while(ii>1&&jj<m)
                        {
                            ii--;
                            jj++;
                            if(v[ii][jj]==1)
                            {
                                ok=0;
                                break;
                            }
                        }
                        if(ok==1)
                            nr++;
                        ii = i; jj = j; ok = 1;
                        while(ii<n&&jj>1)
                        {
                            ii++;
                            jj--;
                            if(v[ii][jj]==1)
                            {
                                ok=0;
                                break;
                            }
                        }
                        if(ok==1)
                            nr++;
                        ii = i; jj = j; ok = 1;
                        while(ii<n&&jj<m)
                        {
                            ii++;
                            jj++;
                            if(v[ii][jj]==1)
                            {
                                ok=0;
                                break;
                            }
                        }
                        if(ok==1)
                            nr++;
                        if(nr>maxim)
                        {
                            maxim = nr;
                            cnt = 1;
                        }
                        else if(nr==maxim)
                        {
                            cnt++;
                        }
                    }
                }
            }
            fout << maxim << " " << cnt << "\n";
        }
    }
    return 0;
}