# PBinfo #4679 – MatrixLH – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

PbInfo vă pune la dispoziție câteva lucruri grozave: o matrice de n x n numere naturale, un număr natural k, precum și alte două numere naturale L și H, unde L ≤ H.

Cerința
Trebuie să determinați câte submatrice k x k au suma elementelor cuprinsă între L și H.

Date de intrare
Programul citește de la tastatură numerele n k L H, iar de pe următoarele n linii citește câte n numere naturale reprezentând o linie din matrice.

Date de ieșire
Programul va afișa pe ecran valoarea S, reprezentând câte de submatrice k x k au suma elementelor cuprinsă între L și H.

Restricții și precizări

1 ≤ k < n ≤ 500, 0 ≤ L ≤ H ≤ 250.000.000
numerele din matrice vor fi mai mici decât 1000

Exemplu:
Intrare

3 2 15 20
2 3 4
5 4 7
1 8 9
Ieșire

2
Explicație
Cele două submatrice 2 x 2 care au suma elementelor cuprinsă între 15 și 20 sunt:

3 4
4 7

și

5 4
1 8

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
int a[505][505], n, k, L, H;
int main()
{
    int i, j, k, nrSubmat, s;
    /// citire
    cin >> n >> k >> L >> H;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
            cin >> a[i][j];
    /// sume partiale
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
            a[i][j] += a[i-1][j] + a[i][j-1] - a[i-1][j-1];
    /// numarare submatrice
    nrSubmat = 0;
    for (i = k; i <= n; i++)
        for (j = k; j <= n; j++)
        {
            s = a[i][j] - a[i-k][j] - a[i][j-k] + a[i-k][j-k];
            if (L <= s && s <= H)
                nrSubmat++;
        }
    cout << nrSubmat;
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/4679)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/4679/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-4679/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
