2751 - BB Security

From Bitnami MediaWiki
Revision as of 19:54, 2 January 2024 by Corjuc Eunice (talk | contribs) (Pagină nouă: Domnul <code>X</code> lucrează la BB Security ca paznic. Deoarece în România sunt foarte puțini hoți, acesta s-a gândit într-o zi să calculeze distanța dintre fiecare doi stâlpi de îngrădire din instituția pe care o păzește. Fiecare doi stâlpi de îngrădire sunt legați printr-un cablu rezistent, care, de obicei nu stă întins la maximum. Din cauză ca în instituție se găsesc mulți stâlpi, domnul <code>X</code> vă provoacă pe voi să calculați ce...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Domnul X lucrează la BB Security ca paznic.

Deoarece în România sunt foarte puțini hoți, acesta s-a gândit într-o zi să calculeze distanța dintre fiecare doi stâlpi de îngrădire din instituția pe care o păzește. Fiecare doi stâlpi de îngrădire sunt legați printr-un cablu rezistent, care, de obicei nu stă întins la maximum.

Din cauză ca în instituție se găsesc mulți stâlpi, domnul X vă provoacă pe voi să calculați ce și-a propus el.

Cerința[edit | edit source]

Se dă un număr n și n triplete de forma l, c, h, reprezentând lungimea egala a doi stâlpi, lungimea cablului dintre acestea și înălțimea la care atârnă cablul față de podea.

Se cere să se afle distanța dintre fiecare doi stâlpi.

Fiecare rezultat va fi afișat pe cate un rând nou.

Date de intrare[edit | edit source]

Programul citește de la tastatură un număr n și apoi n triplete de forma l, c, h, cu semnificația de mai sus.

Date de ieșire[edit | edit source]

Programul va afișa pe linia n a ecranului un număr de forma x care reprezintă lungimea dintre cei doi stâlpi, corespunzătoare datelor de pe linia n+1 din consola de citire, cu exact două zecimale, indiferent de caz, rotunjind a doua zecimală în comparație cu cea de-a treia, sau, dacă a doua zecimală este 5, zecimala a doua va crește cu o unitate doar dacă există încă una sau mai multe zecimale după cea de-a treia și măcar una din ele este > 0 (vezi Restricții).

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

  • 1 ≤ n ≤ 100.000;
  • cele n numere citite vor fi mai mici decât 1.000.000;
  • n, l, c, h sunt numere naturale;
  • este garantat că pentru orice triplet citit există un număr 0 ≤ x ≤ c;
  • cea de-a doua zecimala se rotunjește de obicei după cea de-a treia (ex. 49.4376 se va afișa ca 49.44);
  • a| a ∈ ℕ, acesta se va afișa ca a.00 (ex. 50 se va afișa ca 50.00);
  • Atenție! 23.455 = 23.45 , 23.45501 = 23.46.

Exemplul 1[edit | edit source]

Input:

2

60 100 20

100 50 100

Output:

49.44

50.00

Explicație:

Pentru primul triplet lungimea dintre cei doi stâlpi este 49.44, iar pentru al doilea cablul este întins la maximum și lungimea dintre cei doi stâlpi este 50.00.

Exemplul 2[edit | edit source]

Input:

1

34 7.2 9.1

Output:

Numerele trebuie să fie naturale.

Rezolvare[edit | edit source]

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

def verifica_conditii(n, tests):

   results = []
   
   for i in range(n):
       l, c, h = tests[i]
       
       # Verificare dacă numerele sunt naturale
       if not all(map(lambda x: x.is_integer() and x >= 0, [l, c, h])):
           results.append("Numerele trebuie să fie naturale.")
           continue
       if h == l:
           results.append(f"{int(c):.2f}")
       elif c / 2 + h == l:
           results.append("0.00")
       else:
           a = ((c**2 / 4) - (l - h)**2) / (2 * (l - h))
           t1 = 2 * a * math.log(math.sqrt((c**2 / 4) / (a**2) + 1) + (c / 2) / a)
           
           # Rotunjirea valorilor conform specificațiilor
           rounded_t1 = round(t1, 2)
           if rounded_t1.is_integer():
               results.append(f"{int(rounded_t1)}.00")
           else:
               results.append(f"{rounded_t1:.2f}")
   return results

def main():

   n = int(input())
   tests = []
   
   for _ in range(n):
       l, c, h = map(float, input().split())
       tests.append((l, c, h))
   
   results = verifica_conditii(n, tests)
   for result in results:
       print(result)

if __name__ == "__main__":

   main()

</syntaxhighlight>