2943 - Maru

From Bitnami MediaWiki

Enunt[edit | edit source]

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[edit | edit source]

Să se determine numărul submatricelor care au suma mai mică sau egală cu T.

Date de intrare[edit | edit source]

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[edit | edit source]

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[edit | edit source]

  • 1 ⩽ n, A, B, C, D ⩽ 400
  • 1 ⩽ T ⩽ 30.000
  • O submatrice poate fi formată dintr-un singur element (este o submatrice cu o linie și o coloană).

Exemplu 1[edit | edit source]

Intrare
10 2 1 1 1 43
Ieșire
9
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ă.

Exemplu 2[edit | edit source]

Intrare
0 0 0 0 0 0
Ieșire
Nu au fost respectate cerintele impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 2943 - Maru

def is_valid_input(n, T, A, B, C, D):

   if not (1 <= n <= 400 and 1 <= A <= 400 and 1 <= B <= 400 and 1 <= C <= 400 and 1 <= D <= 400):
       return False
   if not (1 <= T <= 30000):
       return False
   return True

def generate_matrix(n, A, B, C, D):

   matrix = [[(A * i + B * j + C) % D for j in range(n)] for i in range(n)]
   return matrix

def count_submatrices(matrix, T):

   n = len(matrix)
   count = 0
   for i in range(n):
       for j in range(n):
           for k in range(i, n):
               for l in range(j, n):
                   submatrix_sum = sum(matrix[x][y] for x in range(i, k + 1) for y in range(j, l + 1))
                   if submatrix_sum <= T:
                       count += 1
   return count

def main():

   try:
       T, n, A, B, C, D = map(int, input("Introduceti T n A B C D: ").split())
   except ValueError:
       print("Nu au fost respectate cerintele impuse.")
       return
   if not is_valid_input(n, T, A, B, C, D):
       print("Nu au fost respectate cerintele impuse.")
       return
   matrix = generate_matrix(n, A, B, C, D)
   result = count_submatrices(matrix, T)
   print(result)

if __name__ == "__main__":

   main()

</syntaxhighlight>