16003 - Paralele: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Enunt == Pe o foaie cu pătrăţele se stabileşte un sistem de coordonate în care o intersecţie primeşte coordonatele (0,0), astfel încât fiecare intersecţie a caroiajului are coordonate numere întregi. Pe acest caroiaj se desenează un pavaj cu dreptunghiuri, în care fiecare dreptunghi are o lăţime L şi o înălţime H date, iar punctul de coordonate (0,0) este un colţ de dreptunghiuri. În acest mod, fiecare intersecţie a pavajului are coordonate de forma...
 
Ștergerea conținutului paginii
Tag: Blanking
 
Line 1: Line 1:
== Enunt ==


Pe o foaie cu pătrăţele se stabileşte un sistem de coordonate în care o intersecţie primeşte coordonatele (0,0), astfel încât fiecare intersecţie a caroiajului are coordonate numere întregi. Pe acest caroiaj se desenează un pavaj cu dreptunghiuri, în care fiecare dreptunghi are o lăţime L şi o înălţime H date, iar punctul de coordonate (0,0) este un colţ de dreptunghiuri. În acest mod, fiecare intersecţie a pavajului are coordonate de forma (L*i,H*j), cu i şi j întregi.
Se mai dă o pereche de întregi x şi y şi se consideră segmentul de dreaptă ce uneşte punctul de coordonate (0,0) cu punctul de coordonate (x,y).
== Cerinta ==
Se cere să se determine câte dreptunghiuri ale pavajului sunt intersectate de segmentul considerat. Un dreptunghi se consideră intersectat de segment dacă are cel puţin un punct interior comun. Cu alte cuvinte, dacă segmentul doar atinge colţul unui dreptunghi, nu se consideră că îl intersectează.
== Date de intrare ==
Fişierul patrate1.txt conţine, pe o singură linie, 4 numere separate prin spaţii: L H X Y.
== Date de iesire ==
În fişierul patrate1.txt se va scrie un singur număr întreg reprezentând numărul de dreptunghiuri intersectate de segment.
== Restrictii si precizari ==
*1 ≤ L, H, X, Y ≤ 2000000000
== Exemplul 1 ==
;Intrare
:4 2 6 3
;Iesire
;Datele introduse corespund restrictiilor impuse
:2
== Exemplul 2 ==
;Intrare
:4 -7 0 -5.2
;Iesire
;Datele introduse nu corespund restrictiilor impuse
== Rezolvare ==
<syntaxhighlight lang="python3" line="1">
def numar_dreptunghiuri_intersectate(L, H, X, Y):
    numar_intersectii = 0
    # Verificăm fiecare dreptunghi
    for i in range(1, 1001):  # Presupunem că avem cel mult 1000 de dreptunghiuri pe axa X
        for j in range(1, 1001):  # Presupunem că avem cel mult 1000 de dreptunghiuri pe axa Y
            dreptunghi_x1 = L * i
            dreptunghi_x2 = L * (i + 1)
            dreptunghi_y1 = H * j
            dreptunghi_y2 = H * (j + 1)
            # Verificăm dacă segmentul intersectează dreptunghiul
            if (X <= dreptunghi_x1 and dreptunghi_x1 <= 0 and Y >= dreptunghi_y1 and Y <= dreptunghi_y2) or \
              (X >= 0 and X <= dreptunghi_x2 and Y >= dreptunghi_y1 and Y <= dreptunghi_y2) or \
              (X >= dreptunghi_x1 and X <= dreptunghi_x2 and Y >= dreptunghi_y1 and Y <= 0):
                numar_intersectii += 1
    return numar_intersectii
# Citire date de intrare
with open("patrate1.txt", "r") as file:
    L, H, X, Y = map(int, file.readline().split())
# Rezolvare problema
rezultat = numar_dreptunghiuri_intersectate(L, H, X, Y)
# Scriere rezultat în fișierul de ieșire
with open("patrate1.txt", "w") as file_out:
    file_out.write(str(rezultat))
</syntaxhighlight>

Latest revision as of 14:45, 15 December 2023