329
Se dă o matrice pătratică de n x n numere naturale și o valoare naturală T. Suma unei submatrice este suma elementelor submatricei.
Cerința
Să se determine numărul submatricelor care au suma mai mică sau egală cu T.
Date de intrare
Programul citește de la tastatură, în această ordine, numerele T n A B C D. Elementele matricei se vor genera după formula: a[i,j] = (A * i + B * j + C) % D.
Date de ieșire
Programul va afișa pe ecran numărul S, reprezentând numărul submatricelor de sumă mai mică sau egală cu T.
Restricții și precizări
1 ≤ n, A, B, C, D ≤ 4001 ≤ T ≤ 30.000- O submatrice poate fi formată dintr-un singur element (este o submatrice cu o linie și o coloană).
Exemplu
Intrare
10 2 1 1 1 43
Ieșire
8
Explicație
Matricea generată este:
3 4
4 5
Singura submatrice care nu are suma mai mică sau egală cu T este doar matricea întreagă.
#include <bits/stdc++.h>
using namespace std;
int A[502][502] , n , t , a , b , c , d , x[502];
long long cnt;
int main()
{
cin >> t >> n >> a >> b >> c >> d;
for(int i = 1 ; i <= n ; i++)
for(int j = 1 ; j <= n ; j++)
{
A[i][j] = (a * i + b * j + c) % d;
A[i][j] += A[i - 1][j];
}
for(int x1 = 1 ; x1 <= n ; x1++)
for(int x2 = x1 ; x2 <= n ; x2++)
{
for(int i = 1 ; i <= n ; i++)
x[i] = A[x2][i] - A[x1 - 1][i];
int st = 1 , sp = 0;
for(int i = 1 ; i <= n ; i++)
{
sp += x[i];
while(sp > t)
{
sp -= x[st];
st++;
}
cnt += i - st + 1;
}
}
cout << cnt;
}
Comentarii