2034 - Archpsod: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Context== Vrăjitorul Arpsod s-a plictisit groaznic așa că s-a gândit să își cheme prietenii (vrăjitori din regatele vecine) la un joc. Deoarece nu crede în “noroc”, Arpsod i-a provocat la tir cu arcul. Câștigătorul va fi cel ce va avea distanța maximă între două săgeți aflate pe țintă == Cerinţa == Arpsod vă roagă să faceți un program care, pentru un număr '''N''' cunoscut de trageri și poziția fiecărei săgeți pe țintă, determină distan...
 
No edit summary
 
Line 16: Line 16:
*Originea planului este considerată centrul țintei.
*Originea planului este considerată centrul țintei.
== Exemplul 1 ==
== Exemplul 1 ==
; Intrare
; archpsodin.txt
  2
  2
  2 2
  2 2
Line 22: Line 22:




; Ieșire
; archpsodout.txt
   Datele de intrare respecta cerintele impuse.
   Datele de intrare respecta cerintele impuse.
   5.0000
   5.0000
<br>
<br>
== Exemplul 2 ==
== Exemplul 2 ==
; Intrare
; archpsodin.txt
  5
  5
  -4 1
  -4 1
Line 35: Line 35:
  2 300
  2 300


; Ieșire
; archpsodout.txt
  Datele de intrare respecta cerintele impuse.
  Datele de intrare respecta cerintele impuse.
  316.865902
  316.865902

Latest revision as of 19:34, 9 January 2024

Context[edit | edit source]

Vrăjitorul Arpsod s-a plictisit groaznic așa că s-a gândit să își cheme prietenii (vrăjitori din regatele vecine) la un joc. Deoarece nu crede în “noroc”, Arpsod i-a provocat la tir cu arcul. Câștigătorul va fi cel ce va avea distanța maximă între două săgeți aflate pe țintă

Cerinţa[edit | edit source]

Arpsod vă roagă să faceți un program care, pentru un număr N cunoscut de trageri și poziția fiecărei săgeți pe țintă, determină distanța maximă dintre două săgeți.

Date de intrare[edit | edit source]

În fișierul archpsodin.txt, pe prima linie, se va afla numărul natural N, reprezentând numărul de trageri. Pe fiecare din următoarele N linii, se află două numere întregi x și y, reprezentând coordonatele săgeților pe țintă.

Date de ieșire[edit | edit source]

În fișierul archpsodout.txt, pe prima și singura linie se va afișa un număr real reprezentând distanța maximă dintre două săgeți. Răspunsul este considerat corect dacă diferența față de răspunsul oficial este mai mică de 10-6.

În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu respecta cerintele impuse." , iar daca se indeplinesc, se afiseaza mesajul "Datele de intrare respecta cerintele impuse."

Restricţii şi precizări[edit | edit source]

  • 2 ≤ N ≤ 100.000
  • -1.000 ≤ x, y ≤ 1.000
  • Se garantează că toate cele N săgeți sunt pe țintă.
  • Coordonatele planului sunt carteziene
  • Originea planului este considerată centrul țintei.

Exemplul 1[edit | edit source]

archpsodin.txt
2
2 2
-1 -2


archpsodout.txt
 Datele de intrare respecta cerintele impuse.
 5.0000


Exemplul 2[edit | edit source]

archpsodin.txt
5
-4 1
-100 0
0 4
2 -3
2 300
archpsodout.txt
Datele de intrare respecta cerintele impuse.
316.865902

Explicatie[edit | edit source]

În exemplul al doilea, distanța maximă este dată de punctele (-100, 0) și (2, 300)

Exemplul 3[edit | edit source]

Intrare
1
2 3
Ieșire
Datele de intrare nu respecta cerintele impuse.



Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> import math

def distanta_euclidiana(p1, p2):

   return math.sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2)

def distanta_maxima_sagetilor(N, sageți):

   distanta_maxima = 0.0
   for i in range(N):
       for j in range(i + 1, N):
           distanta = distanta_euclidiana(sageți[i], sageți[j])
           distanta_maxima = max(distanta_maxima, distanta)
   return distanta_maxima
  1. Citire date de intrare

try:

   with open("archpsodin.txt", "r") as f:
       N = int(f.readline().strip())
       sageți = [tuple(map(float, f.readline().strip().split())) for _ in range(N)]
   # Verificare dacă datele respectă cerințele impuse
   if 2 <= N <= 100000 and all(-1000 <= x <= 1000 and -1000 <= y <= 1000 for x, y in sageți):
       # Afisare mesaj inainte de rezolvare
       with open("archpsodout.txt", "w") as f:
           f.write("Datele de intrare respecta cerintele impuse.\n")
           f.write(f"{distanta_maxima_sagetilor(N, sageți):.6f}\n")
   else:
       with open("archpsodout.txt", "w") as f:
           f.write("Datele de intrare nu respecta cerintele impuse.")

except Exception as e:

   print(f"O eroare a apărut: {e}")

</syntaxhighlight>