Cerința
Gigel deține un teren de formă dreptunghiulară, împărțite în n•m
sectoare, dispuse pe n
linii și m
coloane. În anumite sectoare sunt instalate camere de luat vederi. Fiecare cameră acoperă anumite sectoare ale terenului, pe diagonală și are o anumită putere k
reprezentând numărul de sectoare pe care le acoperă pe fiecare din cele 4
direcții, inclusiv sectorul în care se află camera.
În figura de mai jos sunt afișate sectoarele acoperite de o cameră de putere 3
.
Determinați câte sectoare ale terenului nu sunt acoperite de nici o cameră.
Date de intrare
Programul citește de la tastatură numerele n m k
, reprezentând dimensiunile terenului și numărul de camere, apoi k
triplete i j p
, reprezentând coordonatele fiecărei camere șî puterea ei.
Date de ieșire
Programul va afișa pe ecran numărul C
, reprezentând numărul de sectoare neacoperite.
Restricții și precizări
1 ≤ n , m ≤ 1000
1 ≤ p ≤ 1000
1 ≤ i ≤ n
1 ≤ j ≤ m
1 ≤ p ≤ min(n,m)
- o cameră poate acoperi un sector în care se află o altă cameră
Exemplu
Intrare
5 7 4 1 7 2 2 3 3 4 2 3 4 5 4
Ieșire
16
Explicație
Exemplul corespunde imaginii de mai jos, în care sectoarele acoperite sunt marcate cu gri.
Camera din sectorul 4 5
acoperă și sectorul 1 2
.
#include<iostream> using namespace std; int main() { int n , m , a[1002][1002] , x , y , z , cnt = 0 , k; cin >> n >> m >> k; for(int i = 1 ; i <= n ; i++) for(int j = 1 ; j <= m ; j++) a[i][j]=-1; for(int i = 1 ; i <= k ; i++) { cin >> x >> y >> z; a[x][y]=z; for(int l = 1 ; l < z ; l++) { if(x + l <= n && y + l <= m)a[x+l][y+l]=z; if(x + l <= n && y - l > 0)a[x+l][y-l]=z; if(x - l > 0 && y + l <= m)a[x-l][y+l]=z; if(x - l > 0 && y - l > 0) a[x-l][y-l]=z; } } for(int i = 1 ; i <= n ; i++) for(int j = 1 ; j <= m ; j++) if(a[i][j]==-1) cnt++; cout<<cnt; return 0; }