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
.
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 Acoperire:
#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;
}
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 .
Rezolvarea problemei #565 Acoperire
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #565 Acoperire 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!