Rezolvare completă PbInfo #1751 Icsuri

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.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Icsuri:

#include <iostream>
#include <algorithm>
using namespace std;

int n, m , a[1001][1001];
int dx[]={ 1, 1,-1,-1},
    dy[]={ 1,-1, 1,-1};

int main()
{
    cin >> n >> m;
    for( ; m ; m --)
    {
        int i ,j , p;
        cin >> i >> j >> p;
        a[i][j] = 1;
        for(int x = 1 ; x <= p ; x ++)
        {
            for(int k = 0 ; k < 4 ; k ++)
                if( i+x * dx[k] > 0 && i + x * dx[k] <= n && j + x * dy[k] > 0 && j + x * dy[k] <= n)
                    a[i + x * dx[k]][j + x * dy[k]] = 1;
        }
    }
    int cnt = 0;
    for(int j = 1 ; j <= n ; j++)
        for(int i = 1 ; i <= n ; i ++)
            if(a[i][j] == 0)
                cnt ++;
    cout << cnt << endl;
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1751 Icsuri

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1751 Icsuri de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!