Cod sursa(job #2415610)

Utilizator IoanaDraganescuIoana Draganescu IoanaDraganescu Data 26 aprilie 2019 12:33:06
Problema Trie Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.06 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("costi.in");
ofstream fout("luna.out");

int a[55][55], d[5005][105];
bool b[55][55], v[5005];
int ddd[8005][8005];

int main()
{
    int n, m;
    fin >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
        {
            fin >> a[i][j];
            v[a[i][j]] = 1;
        }
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            if (b[i][j] == 0)
            {
                int ii = i, jj = j;
                while (a[ii][j] == a[i][j])
                    ii--;
                ii++;
                while (a[i][jj] == a[i][j])
                    jj--;
                jj++;
                int jmic = 100000, q = ii, p = jj;
                while (a[q][jj] == a[i][j])
                {
                    p = jj;
                    while (a[q][p] == a[i][j])
                        p++;
                    p--;
                    if (p < jmic)
                        jmic = p;
                    q++;
                }
                q--;
                for (int aa = ii; aa <= q; aa++)
                    for (int bb = jj; bb <= jmic; bb++)
                        b[aa][bb] = 1;
                int l1 = q - ii + 1, l2 = jmic - jj + 1, x = a[i][j];
                for (int k = 1; k <= min(l1, 100); k++)
                    if (d[x][k] < l2)
                        d[x][k] = l2;
                for (int k = 1; k <= min(l2, 100); k++)
                    if (d[x][k] < l1)
                        d[x][k] = l1;
            }
    int nr;
    fin >> nr;
    while (nr--)
    {
        int t, l1, l2;
        fin >> t >> l1 >> l2;
        if (v[t] == 0)
            cout << "Tara de provenienta nu are parcele pe Luna!" << '\n';
        else
        {
            if (d[t][l1] < l2 && d[t][l2] < l1)
                cout << "Cererea nu poate fi satisfacuta!" << '\n';
            else
                cout << "Cererea poate fi satisfacuta!" << '\n';
        }
    }
    return 0;
}