Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
2898 - Nave
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Echipajul navei Enterprise, a descoperit pe planeta Marte, zona în care sunt amplasate b baze militare care adăpostesc navele de luptă ale marțienilor. Echipajul navei a reușit să cartografieze zona și a împărțit harta planetei în <code>n x m</code> zone de latură 1, dispuse pe n linii (numerotate de sus în jos de la <code>1</code> la <code>n</code>) și m coloane (numerotate de la stânga la dreapta de la <code>1</code> la <code>m</code>). Astfel fiecare zonă poate fi identificată prin numărul liniei și al coloanei pe care se află. În fiecare astfel de zonă se află o bază a marțienilor ce adăpostește un număr de nave. Căpitanul navei Enterprise, Jean-Luc Picard a elaborat o strategie de atac terestru a acestor baze militare. Nava Enterprise poate ateriza într-o zonă în care nu se află o bază marțiană și poate lansa un singur atac (deoarece după primul atac bazele marțiene își vor activa scuturile de protecție). La un atac se vor emite simultan 2 raze laser care vor distruge toate navele marțiene existente în bazele aflate pe direcția acestor raze, în ambele sensuri. Razele sunt emise din centrul zonei în care a aterizat Enterprise și fac unghiuri de <code>45<sup>o</sup></code>, respectiv <code>135<sup>o</sup></code> cu linia pe care se află Enterprise. = Cerința = Scrieți un program care, cunoscând configurația bazelor marțiene, determină numărul maxim de nave marțiene pe care Enterprise le poate distruge la un singur atac, precum și linia și coloana zonei în care poate ateriza nava Enterprise astfel încât să distrugă un număr maxim de nave; dacă există mai multe zone în care poate ateriza convenabil pentru Enterprise este să aleagă zona pentru care linia este maximă; dacă există mai multe zone pe linia maximă, se va alege cea pentru care coloana este maximă. = Date de intrare = Fișierul de intrare <code>nave.in</code> conține pe prima linie trei numere naturale <code>n</code>, <code>m</code> și <code>b</code>, separate prin câte un spațiu, reprezentând numărul de linii, numărul de coloane ale hărții planetei Marte, respectiv numărul de baze marțiene. Pe fiecare dintre următoarele <code>b</code> linii este descrisă câte o bază marțiană sub forma a trei numere naturale separate prin câte un spațiu <code>lin col nr</code>, reprezentând linia și coloana pe care se află baza marțiană, respectiv numărul de nave aflate în baza marțiană respectivă. = Date de ieșire = Fișierul de ieșire <code>nave.out</code> va conține pe prima linie trei numere naturale <code>nrmax</code>, <code>linmax</code>, <code>colmax</code>, separate prin câte un spațiu, reprezentând numărul maxim de nave marțiene pe care Enterprise le poate distruge la un singur atac, precum și linia și coloana zonei în care poate ateriza nava Enterprise astfel încât să distrugă un număr maxim de nave; dacă există mai multe zone în care poate ateriza convenabil pentru Enterprise este să aleagă zona pentru care linia este maximă; dacă există mai multe zone pe linia maximă, se va alege cea pentru care coloana este maximă. = Restricții și precizări = * <code>1 ≤ n, m ≤ 100</code> * <code>n x m ≤ b<sup>2</sup></code> * <code>b ≤ n * m / 2</code> * <code>1 ≤ lin ≤ n</code>; <code>1 ≤ col ≤ m</code>; <code>1 ≤ nr ≤ 1000</code> = Exemplu: = <code>nave.in</code> 5 4 9 1 1 3 1 2 5 2 2 7 2 4 9 3 1 6 3 3 8 4 1 1 5 1 4 5 3 2 <code>nave.out</code> 29 4 2 === Explicație === Harta zonei unde se găsesc bazele marțiene este: Dacă nava Enterprise aterizează în zona situată pe linia <code>4</code> și coloana <code>2</code>, va distruge un număr maxim de nave (<code>29</code>). <syntaxhighlight lang="python" line="1"> def read_input(): n, m = map(int, input().split()) harta = [] for _ in range(n): linie = list(map(int, input().split())) harta.append(linie) return n, m, harta def calculeaza_sume_diagonale(n, m, harta): diag1 = [[0] * m for _ in range(n)] diag2 = [[0] * m for _ in range(n)] # Sume diagonale 45° (/) for i in range(n): for j in range(m): if i > 0 and j > 0: diag1[i][j] = harta[i][j] + diag1[i-1][j-1] else: diag1[i][j] = harta[i][j] # Sume diagonale 135° (\) for i in range(n): for j in range(m): if i > 0 and j < m - 1: diag2[i][j] = harta[i][j] + diag2[i-1][j+1] else: diag2[i][j] = harta[i][j] return diag1, diag2 def gaseste_punct_optim(n, m, harta, diag1, diag2): max_nave = 0 coordonate_optime = (-1, -1) for i in range(n): for j in range(m): if harta[i][j] == 0: # Poate ateriza doar într-o zonă fără bază marțiană suma_nave = 0 if i > 0 and j > 0: suma_nave += diag1[i-1][j-1] if i > 0 and j < m - 1: suma_nave += diag2[i-1][j+1] if suma_nave > max_nave: max_nave = suma_nave coordonate_optime = (i + 1, j + 1) elif suma_nave == max_nave: if i + 1 > coordonate_optime[0] or (i + 1 == coordonate_optime[0] and j + 1 > coordonate_optime[1]): coordonate_optime = (i + 1, j + 1) return max_nave, coordonate_optime def main(): n, m, harta = read_input() diag1, diag2 = calculeaza_sume_diagonale(n, m, harta) max_nave, coordonate_optime = gaseste_punct_optim(n, m, harta, diag1, diag2) print(max_nave) print(coordonate_optime[0], coordonate_optime[1]) # Apelare funcție principală if __name__ == "__main__": main() </syntaxhighlight>
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width