3704 - radar: Difference between revisions

From Bitnami MediaWiki
 
(3 intermediate revisions by the same user not shown)
Line 34: Line 34:
; iesire  
; iesire  


: Datele introduse corespund restrictiilor impuse.
:Datele introduse corespund restrictiilor impuse.


:3 1 2
:3 1 2
Line 65: Line 65:
         self.viteza = viteza
         self.viteza = viteza


def masina_apropiata_la_momentul_t(t, masini):
  def pozitii_la_momentul_t(t, masini):
     pozitii = [(masina.moment, masina.viteza * (t - masina.moment)) for masina in masini]
     pozitii = [(masina.viteza * masina.moment + masina.viteza * (t - masina.moment)) for masina in masini]
    pozitii.sort()
     return pozitii
 
     return pozitii[0][1]


  # Exemplu de folosire
  # Exemplu de folosire
Line 78: Line 76:
  masini_detectate = [masina1, masina2, masina3]
  masini_detectate = [masina1, masina2, masina3]


  moment_t = 2  # Momentul de timp la care vrem să știm care mașină este cea mai apropiată
  moment_t = 2  # Momentul de timp la care vrem să știm pozițiile mașinilor
  pozitie_apropiata = masina_apropiata_la_momentul_t(moment_t, masini_detectate)
  pozitii_la_t = pozitii_la_momentul_t(moment_t, masini_detectate)
 
for i, pozitie in enumerate(pozitii_la_t, start=1):
    print(f"Mașina {i} este la poziția {pozitie} km la momentul {moment_t} ore.")
 
 


print(f"La momentul {moment_t}, mașina cea mai apropiată este la poziția {pozitie_apropiata} km.")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 20:13, 13 December 2023

Cerinta[edit | edit source]

Să se răspundă la Q interogări de forma: dându-se t, care este la momentul t cea mai apropiată mașină de radar dintre cele detectate până atunci (inclusiv cele detectate fix la momentul t)? Dacă există mai multe mașini dintre cele detectate până la momentul t pentru care distanța față de radar este minimă, puteți afișa oricare dintre ele.

Date de intrare[edit | edit source]

Prima linie conține numerele N și Q, numărul de mașini, respectiv numărul de interogări. Urmează N linii, pe a i-a dintre acestea se citesc doua numere ti, respectiv vi cu semnificația de mai sus (pentru orice i = 1..N). Ultima linie conține Q numere întregi, corespunzând celor Q interogări (pentru fiecare interogare se citește un număr corespunzător lui t cu semnificația de mai sus).

Date de iesire[edit | edit source]

Se va afișa o singură linie ce va conține Q numere separate prin câte un spațiu, corespunzând răspunsurilor la interogări. Pentru fiecare interogare t se afișează indicele celei mai apropiate mașini față de radar la momentul t, dintre cele detectate până la momentul t (mașinile sunt indexate începând de la 1 în ordinea în care au fost citite). Dacă până la momentul t nu s-a detectat nicio mașină se va afișa -1 pentru interogarea respectivă.

Restrictii si precizari[edit | edit source]

  • 1 ≤ N ≤ 100.000
  • 1 ≤ Q ≤ 300.000
  • -1.000.000.000 ≤ vi , ti ≤ 1.000.000.000, vi ≠ 0 pentru orice i = 1..N
  • -1.000.000.000 ≤ t ≤ 1.000.000.000 pentru orice interogare
  • pentru teste în valoare de 32 de puncte 1 ≤ N ≤ 1000 și 1 ≤ Q ≤ 3000.

Exemplul 1[edit | edit source]

intrare
3 3
2 1
4 2
-2 -1
1 3 4
iesire
Datele introduse corespund restrictiilor impuse.
3 1 2

Exemplul 2[edit | edit source]

intrare
4 5
3 2
5 3
- 3 - 2
2 4 5
iesire
Datele de intrare nu corespund restrictiilor impuse.

Rezolvare[edit | edit source]

<syntaxhighlightlang="python3" line="1"

class Masina:
   def __init__(self, moment, viteza):
       self.moment = moment
       self.viteza = viteza
  def pozitii_la_momentul_t(t, masini):
   pozitii = [(masina.viteza * masina.moment + masina.viteza * (t - masina.moment)) for masina in masini]
   return pozitii
# Exemplu de folosire
masina1 = Masina(1, 60)  # Mașina 1 detectată la t=1, v=60 km/h
masina2 = Masina(2, 80)  # Mașina 2 detectată la t=2, v=80 km/h
masina3 = Masina(3, 100)  # Mașina 3 detectată la t=3, v=100 km/h
masini_detectate = [masina1, masina2, masina3]
moment_t = 2  # Momentul de timp la care vrem să știm pozițiile mașinilor
pozitii_la_t = pozitii_la_momentul_t(moment_t, masini_detectate)
for i, pozitie in enumerate(pozitii_la_t, start=1):
   print(f"Mașina {i} este la poziția {pozitie} km la momentul {moment_t} ore.")



</syntaxhighlight>