fbpx

Problema #565 – Acoperire – Rezolvari PBInfo

de Mihai-Alexandru

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;
}
Comentarii

S-ar putea sa iti placa