2353 - Padure

From Bitnami MediaWiki
Revision as of 18:09, 15 December 2023 by Raul (talk | contribs) (Pagină nouă: Într-o pădure există plantați copaci pe <code>N</code> linii și <code>M</code> coloane. Copacii au diferite înălțimi. O zonă dreptunghiulară de copaci din cadrul pădurii trebuie tăiată. Pădurarul trebuie să aleagă dintre <code>C</code> zone, o zonă în care suma înălțimilor copacilor este maximă. Deoarece pădurarului îi plac numerele prime, el va alege o zonă în care suma înălțimilor copacilor este și un număr prim. = Cerința = Determinați sum...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Într-o pădure există plantați copaci pe N linii și M coloane. Copacii au diferite înălțimi. O zonă dreptunghiulară de copaci din cadrul pădurii trebuie tăiată. Pădurarul trebuie să aleagă dintre C zone, o zonă în care suma înălțimilor copacilor este maximă. Deoarece pădurarului îi plac numerele prime, el va alege o zonă în care suma înălțimilor copacilor este și un număr prim.

Cerința[edit | edit source]

Determinați suma din enunț pentru zonele puse la dispoziție.

Date de intrare[edit | edit source]

Fișierul de intrare padure.in conţine pe prima linie numerele N, M și C cu semnificația din enunț, pe următoarele N linii înălțimile copacilor, câte M pe o linie, separate prin câte un spațiu, iar pe următoarele C linii, câte patru pe fiecare linie, valorile l1, c1, l2, c2 separate prin câte un spațiu, ce reprezintă coordonatele colțului stânga-sus, respectiv coordonatele colțului dreapta-jos a unei zone ce poate fi tăiată.

Date de ieșire[edit | edit source]

Fișierul de ieșire padure.out va conţine pe prima linie rezultatul corespunzător cerinței problemei.

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

  • 1 ≤ N, M ≤ 100
  • 1 ≤ C ≤ 100.000
  • numerotarea liniilor și coloanelor din pădure începe de la 1
  • 0 < l1 ≤ l2 ≤ N
  • 0 < c1 ≤ c2 ≤ M
  • pentru fiecare set de date de intrare există soluție
  • înălțimea copacilor nu depășește valoarea 100

Exemplu:[edit | edit source]

padure.in

4 4 2
9 3 2 4
6 2 1 5
2 3 2 4
4 5 3 4
1 1 3 3
2 2 4 4

padure.out

29

Explicație[edit | edit source]

9 3 2

6 2 1

2 3 2

are suma 30, dar nu este prim

2 1 5

3 2 4

5 3 4

are suma 29

Încărcare soluție[edit | edit source]

Lipește codul aici[edit | edit source]

<syntaxhighlight lang="python" line="1"> import math

n, m, k = map(int, input().split()) A = [[0] * (m + 1) for _ in range(n + 1)] S = [[0] * (m + 1) for _ in range(n + 1)] smax = -200000000

def prim(n):

   if n == 0 or n == 1:
       return False
   if n == 2:
       return True
   if n % 2 == 0:
       return False
   for i in range(3, int(math.sqrt(n)) + 1, 2):
       if n % i == 0:
           return False
   return True

for i in range(1, n + 1):

   for j in range(1, m + 1):
       A[i][j] = int(input())

for i in range(1, n + 1):

   for j in range(1, m + 1):
       S[i][j] = S[i - 1][j] + S[i][j - 1] - S[i - 1][j - 1] + A[i][j]

for _ in range(k):

   i1, j1, i2, j2 = map(int, input().split())
   s = S[i2][j2] - S[i1 - 1][j2] - S[i2][j1 - 1] + S[i1 - 1][j1 - 1]
   if s > smax and prim(s):
       smax = s

print(smax)


</syntaxhighlight>