2751 - BB Security
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ât1.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 ca49.44
); - ∀
a
|a
∈ ℕ, acesta se va afișa caa.00
(ex.50
se va afișa ca50.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>