# PBinfo #1751 – icsuri – Rezolvare C++

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

## Enunț

Cerința
În clasa a IX-a A sunt M elevi, numerotați de la 1 la M și fiecare are un număr preferat P. Plictisiți de ora de informatică, au inventat următorul joc:


pe o foaie de matematică desenează o tablă de joc de dimensiune N, formată din N linii și N coloane, numerotate de la 1 la N; fiecare linie și fiecare coloană are câte N pătrățele
fiecare elev alege un pătrățel și desenează un X centrat în pătrățelul ales, fiecare din cele 4 laturi având cel mult P pătrățele desenate, fără a ieși de pe tabla de joc (să nu mâzgălească banca!!).
icsurile desenate de elevi se pot suprapune.

În figura de mai jos este reprezentat un X desenat de elevul care alege pătrățelul de coordonate i j și preferă numărul 3.



Cunoscând dimensiunea N a tablei de joc, numărul M de elevi, coordonatele alese de fiecare elev și numărul preferat al fiecărui elev, determinați câte pătrățele de pe tablă rămân nedesenate.

Date de intrare
Programul citește de la tastatură numărul N M, iar apoi M triplete i j p, reprezentând coordonatele pătrățelului ales și numărul preferat de fiecare elev.

Date de ieșire
Programul va afișa pe ecran numărul de pătrățele nedesenate.

Restricții și precizări

1 ≤ N ≤ 1000
1 ≤ M ≤ 100000
1 ≤ i,j ≤ N
0 ≤ p ≤ N/2

Exemplu:
Intrare

10 5
1 2 1
6 6 3
7 3 2
2 5 2
9 8 3
Ieșire

62
Explicație
Exemplul corespunde tablei de joc de mai jos. Unele pătrățele au fost desenate de mai multe ori.

## Cod sursă C++

```cpp
#include <bits/stdc++.h>
using namespace std;
int n, m, mat[1001][1001], rez = 0;
int diagx[] = { 1, 1, -1, -1 }, diagy[5] = { 1, -1, 1, -1 };
int main() {
    cin >> n >> m;
    while (m--) {
        int i, j, p;
        cin >> i >> j >> p;
        mat[i][j] = 1;
        for (int x = 1; x <= p; x++) {
            for (int k = 0; k < 4; k++)
                if (i + x * diagx[k] > 0 && i + x * diagx[k] <= n && j + x * diagy[k] > 0 && j + x * diagy[k] <= n)
                    mat[i + x * diagx[k]][j + x * diagy[k]] = 1;
        }
    } for (int j = 1; j <= n; j++)
        for(int i = 1; i <= n; i ++)
            if (mat[i][j] == 0) rez++;
    cout << rez;
    return 0;
}
```

## Resurse

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