2211 - True: Difference between revisions

From Bitnami MediaWiki
Mraa (talk | contribs)
Pagină nouă: Să considerăm o matrice cu N linii şi N coloane cu elemente numere naturale. În această matrice trebuie să plasăm două ture, în poziţii distincte. Spunem că un element al matricei este atacat dacă se află pe aceeaşi linie sau pe aceeaşi coloană cu una dintre cele două ture. Elementele din poziţiile celor două ture nu sunt considerate atacate. Turele vor fi plasate astfel încât suma elementelor atacate să fie cât mai mare. ==Cerința== Scrieţi un progra...
 
Mraa (talk | contribs)
 
(2 intermediate revisions by the same user not shown)
Line 26: Line 26:


==Rezolvare==
==Rezolvare==
<syntaxhighlight lang="python3" line="1">
def find_max_attack_sum(matrix):
def find_max_attack_sum(matrix):
    n = len(matrix)
    max_sum = 0


    for i in range(n):
  n = len(matrix)
        for j in range(n):
  max_sum = 0
            for k in range(i + 1, n):
  for i in range(n):
                for l in range(j + 1, n):
      for j in range(n):
                    # Calculează suma elementelor atacate de turele plasate la (i, j) și (k, l)
          for k in range(i + 1, n):
                    attack_sum = sum(matrix[i][col] for col in range(n)) + sum(matrix[row][j] for row in range(n))
              for l in range(j + 1, n):
                    attack_sum -= matrix[i][j] + matrix[k][l]  # eliminăm dublurile
                  # Calculează suma elementelor atacate de turele plasate la (i, j) și (k, l)
                  attack_sum = sum(matrix[i][col] for col in range(n)) + sum(matrix[row][j] for row in range(n))
                  attack_sum -= matrix[i][j] + matrix[k][l]  # eliminăm dublurile
                  # Actualizează suma maximă
                  max_sum = max(max_sum, attack_sum)
  return max_sum
Citire date de intrare


                    # Actualizează suma maximă
with open("ture.in", "r") as file:
                    max_sum = max(max_sum, attack_sum)


    return max_sum
  n = int(file.readline().strip())
  matrix = [list(map(int, file.readline().split())) for _ in range(n)]
Găsește suma maximă a elementelor atacate


# Citire date de intrare
result = find_max_attack_sum(matrix)
with open("ture.in", "r") as file:
    n = int(file.readline().strip())
    matrix = [list(map(int, file.readline().split())) for _ in range(n)]


# Găsește suma maximă a elementelor atacate
Scrie rezultatul în fișierul de ieșire
result = find_max_attack_sum(matrix)


# Scrie rezultatul în fișierul de ieșire
with open("ture.out", "w") as file:
with open("ture.out", "w") as file:
    file.write(str(result) + "\n")
 
  file.write(str(result) + "\n")
</syntaxhighlight>

Latest revision as of 18:21, 11 January 2024

Să considerăm o matrice cu N linii şi N coloane cu elemente numere naturale. În această matrice trebuie să plasăm două ture, în poziţii distincte. Spunem că un element al matricei este atacat dacă se află pe aceeaşi linie sau pe aceeaşi coloană cu una dintre cele două ture. Elementele din poziţiile celor două ture nu sunt considerate atacate. Turele vor fi plasate astfel încât suma elementelor atacate să fie cât mai mare.

Cerința[edit | edit source]

Scrieţi un program care să determine suma elementelor atacate (maximă posibil).

Date de intrare[edit | edit source]

Fișierul de intrare ture.in va conţine pe prima linie un număr natural N, cu semnificaţia din enunţ. Pe fiecare dintre următoarele N linii se află câte N numere naturale, reprezentând elementele matricei.

Date de ieșire[edit | edit source]

Fișierul de ieșire ture.out va conţine o singură linie pe care va fi scrisă suma maximă.

Restricții și precizări[edit | edit source]

2 ≤ N ≤ 100 Elementele matricei sunt numere naturale mai mici sau egale cu 255 ==Exemplu==: ture.in 5 4 2 2 3 3 4 2 1 4 0 1 3 4 0 1 4 3 0 2 3 0 0 3 0 4 ture.out 40

Explicație[edit | edit source]

Prima tură va fi plasată în poziţia (4,3), iar cea de a doua tură va fi plasată în poziţia (2,5).

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def find_max_attack_sum(matrix):

  n = len(matrix)
  max_sum = 0
  for i in range(n):
      for j in range(n):
          for k in range(i + 1, n):
              for l in range(j + 1, n):
                  # Calculează suma elementelor atacate de turele plasate la (i, j) și (k, l)
                  attack_sum = sum(matrix[i][col] for col in range(n)) + sum(matrix[row][j] for row in range(n))
                  attack_sum -= matrix[i][j] + matrix[k][l]  # eliminăm dublurile
                  # Actualizează suma maximă
                  max_sum = max(max_sum, attack_sum)
  return max_sum

Citire date de intrare

with open("ture.in", "r") as file:

  n = int(file.readline().strip())
  matrix = [list(map(int, file.readline().split())) for _ in range(n)]

Găsește suma maximă a elementelor atacate

result = find_max_attack_sum(matrix)

Scrie rezultatul în fișierul de ieșire

with open("ture.out", "w") as file:

  file.write(str(result) + "\n")

</syntaxhighlight>