Cerința
Maria dansează! Lecțiile de dans se desfășoară într-o sală imensă, împărțită în n*m
sectoare pătratice cu dimensiunea 1
, dispuse pe n
linii și m
coloane. În anumite sectoare se află diverse obstacole, astfel că acele sectoare nu pot fi utilizate pentru dans. Maria are nevoie pentru dans de o zonă dreptunghiulară de dimensiuni p
, q
, cu laturile paralele cu pereții sălii, care să nu conțină obstacole și vrea ca în fiecare zi să danseze într-o zonă diferită de cele în care a dansat deja. Determinați numărul de zile în care Maria poate dansa așa cum își dorește.
Date de intrare
Fișierul de intrare maria.in
conține pe prima linie numerele n m p q
. A doua linie conține numărul k
de sectoare din sală în care se află obstacole. Fiecare dintre următoarele k
linii conține două numere i j
, reprezentând linia și coloana unui sector ce conține un obstacol.
Date de ieșire
Fișierul de ieșire maria.out
va conține pe prima linie numărul Z
de zile în care Maria poate dansa în zone diferite.
Restricții și precizări
1 ≤ n, m , p , q ≤ 1000
0 ≤ k ≤ 1000
1 ≤ i ≤ n, 1 ≤ j ≤ m
- două zone de dans sunt distincte dacă diferă prin cel puțin un sector
- zona de dans poate fi orientată astfel încât să ocupe
p
linii șiq
coloane sauq
linii șip
coloane
Exemplu
maria.in
5 6 2 3 3 2 2 3 5 4 3
maria.out
5
Explicație
Cele 5
moduri de stabilire a zonei de dans sunt:
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 Maria:
//maria
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("maria.in");
ofstream fout("maria.out");
int a[1005][1005], n, m , p , q, s[1005][1005];
int main(){
int k;
fin >> n >> m >> p >> q >> k;
for(int pp = 1 ; pp <= k ; ++pp)
{
int i ,j ;
fin >> i >> j;
a[i][j] = 1;
}
for(int i =1 ; i <= n ;++ i)
for(int j =1 ; j <= m ; ++j)
s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + a[i][j];
int Z = 0;
for(int i =1 ; i <= n ;++ i)
for(int j =1 ; j <= m ; ++j)
{
int x,y;
x = i + p - 1, y = j + q - 1;
if(x <= n && y <= m)
if(s[x][y] - s[x][j-1] - s[i-1][y] + s[i-1][j-1] == 0)
Z ++; // cout << i << " " << j << " p q
";
x = i + q - 1, y = j + p - 1;
if(x <= n && y <= m)
if(s[x][y] - s[x][j-1] - s[i-1][y] + s[i-1][j-1] == 0)
Z ++; // cout << i << " " << j << " q p
";
}
fout << Z;
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 #604 Maria
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #604 Maria 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!