Cerința
Plictisindu-se la ora de matematică, Gigel a luat o foaie de pătrățele cu n
linii și m
coloane și a început să deseneze romburi, fiecare având forma din imagine și diferite dimensiuni. Este posibil ca unele romburi să fie incomplet desenate, datorită apropierii de marginea foii. În plus, unele romburi se pot suprapune. În felul acesta o parte dintre pătrățelele de pe foaie sunt colorate, altele sunt intacte. Pentru fiecare romb desenat (chiar incomplet), Gigel a notat pe altă foaie coordonatele (linie, coloană) colțului de sus și dimensiunea.
Determinați numărul de pătrățele de pe foaie care sunt intacte, după desenarea romburilor.
Date de intrare
Fișierul de intrare romburi.in
conține pe prima linie numerele n m p
. Următoarele p
linii conțin numerele i j L
, reprezentând un romb cu vârful de sus la coordonatele i j
cu Lungimea laturii L
.
Date de ieșire
Fișierul de ieșire romburi.out
va conține pe prima linie numărul C
de pătrățele intacte.
Restricții și precizări
1 ≤ n,m, L ≤ 1000
1 ≤ p ≤ 100
Exemplu
romburi.in
12 13 5 4 5 4 2 3 2 3 8 3 2 11 1 8 11 5
romburi.out
93
Explicație
Exemplul corespunde imaginii de mai jos. În exemplu două romburi se suprapun si unul este incomplet.
#include <bits/stdc++.h> using namespace std; ifstream cin("romburi.in"); ofstream cout("romburi.out"); int n , m , p , l , A[2005][2005] , a , b , cnt; int main() { cin >> n >> m >> p; for(int k = 1 ; k <= p ; k++) { cin >> a >> b >> l; for(int i = 0 ; i < l ; i++) for(int j = 0 ; j <= i ; j++) A[a + i][b + j] = 1 , A[a + i][b - j] = 1; a += 2*(l - 1); for(int i = 0 ; i < l - 1 ; i++) for(int j = 0 ; j <= i ; j++) A[a - i][b + j] = 1 , A[a - i][b - j] = 1; } for(int i = 1 ; i <= n ; i++) for(int j = 1 ; j <= m ; j++) if(A[i][j] == 0) cnt++; cout << cnt; return 0; }