Informatică, întrebare adresată de pmarian98, 8 ani în urmă

#2902 Pavaj

Cerința
Curtea bunicului are forma unei matrice cu n linii și m coloane și este pavată cu n*m dale, o parte dintre acestea fiind deteriorate. Bunicul a realizat un plan al curții în care a marcat cu 0 dalele deteriorate și cu 1 pe cele nedeteriorate.

Bunicul a primit k oferte pentru a vinde zone dreptunghiulare ale curții. Fiecare zonă este determinată de coordonatele l1 c1 l2 c2 a două colțuri opuse ale ei. Pentru fiecare zonă bunicul dorește să afle dacă conține doar dale nedeteriorate, doar dale deteriorate sau conține și dale deteriorate și dale nedeteriorate.

Date de intrare
Fișierul de intrare pavaj.in conține pe prima linie numerele n m k. Următoarele n linii conțin câte m valori 0 sau 1, reprezentând planul curții. Următoarele k linii conțin câte patru valori, l1 c1 l2 c2, reprezentând coordonatele a două colțuri opuse ale unei zone.

Date de ieșire
Fișierul de ieșire pavaj.out va conține k linii. Fiecare linie va conține valoarea 0, 1 sau 2, după cum zona corespunzătoare din fișierul de intrare:

conține doar dale deteriorate
conține doar dale nedeteriorate
conține atât dale nedeteriorate, cât și dale deteriorate
Restricții și precizări
1 ≤ n, m ≤ 1000
1 ≤ k ≤ 100000
1 ≤ l1, l2 ≤ n
1 ≤ c1, c2 ≤ m
numerotarea liniilor și a coloanelor începe de la 1
pentru 50% din teste 1 ≤ n, m, k ≤ 1000



Exemplu
pavaj.in

4 6 3
0 0 1 1 1 0
0 0 1 1 1 0
0 0 0 0 0 1
1 0 1 0 1 0
1 1 3 2
2 4 1 5
1 6 4 2
pavaj.out

0
1
2

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
6

#include <fstream>

using namespace std;

int sume[1001][1001];

ifstream fin("pavaj.in");

ofstream fout("pavaj.out");

int main(){

int n,m,x,k;

   fin >> n >> m >> k;

   for(int i = 1; i<=n; i++){

       for(int j = 1; j <= m; j++){

           fin >> x;

        sume[i][j] = sume[i-1][j] + sume[i][j-1] - sume[i-1][j-1] + x;

       }

   }

   int c1, c2, l1, l2;

   for(int oferta = 0; oferta < k; oferta++){

    fin >> l1 >> c1 >> l2 >> c2;

       if(c1 > c2){

        x = c1;

           c1 = c2;

           c2 = x;

       }

       if(l1 > l2){

        x = l1;

           l1 = l2;

           l2 = x;

       }

       int total = sume[l2][c2] - sume[l2][c1-1] - sume[l1-1][c2] + sume[l1-1][c1-1];

       int arie = (l2-l1+1) * (c2-c1+1);

       if(total == 0){

        fout << "0\n";

       }else if(total == arie){

        fout << "1\n";

       }else fout << "2\n";

   }

}

Alte întrebări interesante