2902 - Pavaj

From Bitnami MediaWiki

Cerința[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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[edit | edit source]

  • 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:[edit | edit source]

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

Încărcare soluție[edit | edit source]

Lipește codul aici[edit | edit source]

<syntaxhighlight lang="python" line="1">

  1. include <iostream>
  2. include <fstream>

using namespace std;

int main() {

   ifstream cin("pavaj.in");
   ofstream cout("pavaj.out");
   int n, m, t, s[1001][1001], i1, j1, i2, j2;
   cin >> n >> m >> t;
   for (int i = 1; i <= n; i++)
       for (int j = 1; j <= m; j++)
           cin >> s[i][j];
   for (int i = 1; i <= n; ++i)
       for (int j = 1; j <= m; ++j)
           s[i][j] = s[i][j] + s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];
   for (int i = 1; i <= t; i++)
   {
       cin >> i1 >> j1 >> i2 >> j2;
       int sum = 0, nr = 0;
       if (i1 <= i2 && j1 <= j2)
           sum = s[i2][j2] - s[i1 - 1][j2] - s[i2][j1 - 1] + s[i1 - 1][j1 - 1], nr = (j2 - j1 + 1) * (i2 - i1 + 1);
       else if (i1 >= i2 && j1 <= j2)
           sum = s[i1][j2] - s[i2 - 1][j2] - s[i1][j1 - 1] + s[i2 - 1][j1 - 1], nr = (i1 - i2 + 1) * (j2 - j1 + 1);
       else if (i1 <= i2 && j1 >= j2)
           sum = s[i2][j1] - s[i1 - 1][j1] - s[i2][j2 - 1] + s[i1 - 1][j2 - 1], nr = (i2 - i1 + 1) * (j1 - j2 + 1);
       else
           sum = s[i1][j1] - s[i2 - 1][j1] - s[i1][j2 - 1] + s[i2 - 1][j2 - 1], nr = (i1 - i2 + 1) * (j1 - j2 + 1);
       if (sum == 0)
           cout << 0 << '\n';
       else if (sum == nr)
           cout << 1 << '\n';
       else
           cout << 2 << '\n';
   }

}


</syntaxhighlight>