2034 - Archpsod

From Bitnami MediaWiki
Revision as of 19:34, 9 January 2024 by Tita Marian (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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ța maximă dintre două săgeți.

Date de intrare

Î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

Î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

  • 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

archpsodin.txt
2
2 2
-1 -2


archpsodout.txt
 Datele de intrare respecta cerintele impuse.
 5.0000


Exemplul 2

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

Explicatie

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

Exemplul 3

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



Rezolvare

<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>