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
#include <bits/stdc++.h> using namespace std; ifstream cin("pavaj.in"); ofstream cout("pavaj.out"); int n , m , t , s[1001][1001] , i1 , j1 , i2 , j2; int main() { 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'; } }