# PBinfo #565 – Acoperire – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

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.

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
int n,m,k,a[1005][1005];
int di[] = {1,1,-1,-1},
    dj[] = {1,-1,1,-1};
int main()
{
    int i,j,p;
    cin >> n >> m >> k;
    for( ; k ; --k)
    {
        cin >> i >> j >> p;
        for(int pp = 0 ; pp < p ; pp ++)
            for(int x = 0 ; x < 4 ; x ++)
            {
                int ii = i + pp * di[x], jj = j + pp * dj[x];
                if(ii > 0 && ii <= n && jj > 0 && jj <= m)
                    a[ii][jj] ++;
            }
    }
    int cnt = 0;
    /*
    for(int i = 1 ; i <= n ; ++i)
    {
        for(int j = 1 ; j <= m ; ++j )
            cout << a[i][j] << " ";
        cout << endl;
    }
    */
    for(int i = 1 ; i <= n ; ++i)
        for(int j = 1 ; j <= m ; ++j )
            if(a[i][j] == 0)
                cnt ++;
    cout << cnt;
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/565)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/565/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-565/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
