2020 - Error: Difference between revisions

From Bitnami MediaWiki
Andrada378 (talk | contribs)
Pagină nouă: '''''<u>Cerința</u>''''' Dorel trebuie să repare reţeaua de alimentare cu apă din oraşul lui. Pentru fiecare din cele n străzi Dorel şi-a notat două numere naturale, raportul lor fiind lungimea conductei care trebuie înlocuită pe acea stradă. Pentru a destrăma mitul “Dorel, instalatorul dezastru”, el vă roagă să aflaţi lungimea totală a conductei de care are nevoie pentru a repara toate străzile, cu 20 de zecimale exacte. '''''<u>Date de intrare</u>'''...
 
Andrada378 (talk | contribs)
No edit summary
Line 1: Line 1:
'''''<u>Cerința</u>'''''
== Cerința ==
 
Dorel trebuie să repare reţeaua de alimentare cu apă din oraşul lui. Pentru fiecare din cele n străzi Dorel şi-a notat două numere naturale, raportul lor fiind lungimea conductei care trebuie înlocuită pe acea stradă. Pentru a destrăma mitul “Dorel, instalatorul dezastru”, el vă roagă să aflaţi lungimea totală a conductei de care are nevoie pentru a repara toate străzile, cu 20 de zecimale exacte.
Dorel trebuie să repare reţeaua de alimentare cu apă din oraşul lui. Pentru fiecare din cele n străzi Dorel şi-a notat două numere naturale, raportul lor fiind lungimea conductei care trebuie înlocuită pe acea stradă. Pentru a destrăma mitul “Dorel, instalatorul dezastru”, el vă roagă să aflaţi lungimea totală a conductei de care are nevoie pentru a repara toate străzile, cu 20 de zecimale exacte.


'''''<u>Date de intrare</u>'''''
== Date de intrare ==
Fișierul de intrare errorin.txt conține pe prima linie numărul n, iar pe următoarele n linii câte două numere naturale nenule reprezentând numărătorul, respectiv numitorul raportului ce reprezintă lungimea conductei ce trebuie înlocuită pe strada respectivă.


Fișierul de intrare error.in conține pe prima linie numărul n, iar pe următoarele n linii câte două numere naturale nenule reprezentând numărătorul, respectiv numitorul raportului ce reprezintă lungimea conductei ce trebuie înlocuită pe strada respectivă.
== Date de ieșire ==
Fișierul de ieșire errorout.txt va conține pe prima linie primele 20 de zecimale ale lungimii totale a conductei, despărţite prin spaţiu.


'''''<u>Date de ieșire</u>'''''
== Restricții și precizări ==


Fișierul de ieșire error.out va conține pe prima linie primele 20 de zecimale ale lungimii totale a conductei, despărţite prin spaţiu.
* 1 ≤ n ≤ 100.000
* numerele notate de Dorel sunt naturale, nenule şi mai mici decât 1000
* pentru fiecare zecimală corectă, începând de la virgulă, se primeşte câte 1p ( dacă o zecimală e greşită, pentru următoarele după ea nu se mai acordă puncte)


'''''<u>Restricții și precizări</u>'''''
== Exemplu: ==
 
errorin.txt
1 ≤ n ≤ 100.000
 
numerele notate de Dorel sunt naturale, nenule şi mai mici decât 1000
 
pentru fiecare zecimală corectă, începând de la virgulă, se primeşte câte 1p ( dacă o zecimală e greşită, pentru următoarele după ea nu se mai acordă puncte)
 
'''''<u>Exemplu:</u>'''''
 
error.in


1
1
Line 27: Line 21:
7 5
7 5


error.out
errorout.txt


4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


Explicație
== Explicație ==
 
7/5=1,40000000000000000000…
7/5=1,40000000000000000000…


'''''<u>Rezolvare</u>'''''<syntaxhighlight lang="python">
== Rezolvare ==
<syntaxhighlight lang="python">
def citeste_date():
def citeste_date():
     with open("errorin.txt", "r") as infile:
     with open("errorin.txt", "r") as infile:
        # Citește numărul de teste n
         n = int(infile.readline())
         n = int(infile.readline())
         date = []
         date = []
        # Citește perechile de valori a și b pentru fiecare test și le adaugă la lista date
         for _ in range(n):
         for _ in range(n):
             a, b = map(int, infile.readline().split())
             a, b = map(int, infile.readline().split())
             date.append((a, b))
             date.append((a, b))
    # Returnează numărul de teste și lista de date
     return n, date
     return n, date


# Funcție pentru calcularea resturilor și transportului
 
def calculeaza_resturi_si_transport(n, date):
def calculeaza_resturi_si_transport(n, date):
    # Inițializează un array c cu 31 de elemente, toate setate la 0
     c = [0] * 31
     c = [0] * 31
    # Parcurge datele de intrare pentru fiecare test
     for a, b in date:
     for a, b in date:
        # Calculează restul și actualizează array-ul c
         r = a % b
         r = a % b
         for j in range(1, 31):
         for j in range(1, 31):
             c[j] += (r * 10) // b
             c[j] += (r * 10) // b
             r = (r * 10) % b
             r = (r * 10) % b
    # Returnează array-ul c
     return c
     return c


# Funcție pentru efectuarea transportului și scrierea rezultatului în fișierul de ieșire
def efectueaza_transport_si_scrie_rezultatul(c):
def efectueaza_transport_si_scrie_rezultatul(c):
    # Inițializează o variabilă t la 0
     t = 0
     t = 0
    # Realizam operația de transport la depășire asupra array-ului c
     for j in range(30, 0, -1):
     for j in range(30, 0, -1):
         r = (c[j] + t) % 10
         r = (c[j] + t) % 10
Line 72: Line 56:
         c[j] = r
         c[j] = r


    # Deschidem fișierul de ieșire pentru scriere
     with open("errorout.txt", "w") as outfile:
     with open("errorout.txt", "w") as outfile:
        # Scrie primele 20 de elemente ale array-ului c în fișierul de ieșire
         for j in range(1, 21):
         for j in range(1, 21):
             outfile.write(f"{c[j]} ")
             outfile.write(f"{c[j]} ")
# Funcția principală care apelează celelalte funcții pentru a executa programul
def main():
def main():
    # Citirea datelor de intrare
 
     n, date = citeste_date()
     n, date = citeste_date()
    # Calcularea resturilor și transportului
     c = calculeaza_resturi_si_transport(n, date)
     c = calculeaza_resturi_si_transport(n, date)
    # Efectuarea transportului și scrierea rezultatului în fișierul de ieșire
     efectueaza_transport_si_scrie_rezultatul(c)
     efectueaza_transport_si_scrie_rezultatul(c)



Revision as of 21:53, 2 January 2024

Cerința

Dorel trebuie să repare reţeaua de alimentare cu apă din oraşul lui. Pentru fiecare din cele n străzi Dorel şi-a notat două numere naturale, raportul lor fiind lungimea conductei care trebuie înlocuită pe acea stradă. Pentru a destrăma mitul “Dorel, instalatorul dezastru”, el vă roagă să aflaţi lungimea totală a conductei de care are nevoie pentru a repara toate străzile, cu 20 de zecimale exacte.

Date de intrare

Fișierul de intrare errorin.txt conține pe prima linie numărul n, iar pe următoarele n linii câte două numere naturale nenule reprezentând numărătorul, respectiv numitorul raportului ce reprezintă lungimea conductei ce trebuie înlocuită pe strada respectivă.

Date de ieșire

Fișierul de ieșire errorout.txt va conține pe prima linie primele 20 de zecimale ale lungimii totale a conductei, despărţite prin spaţiu.

Restricții și precizări

  • 1 ≤ n ≤ 100.000
  • numerele notate de Dorel sunt naturale, nenule şi mai mici decât 1000
  • pentru fiecare zecimală corectă, începând de la virgulă, se primeşte câte 1p ( dacă o zecimală e greşită, pentru următoarele după ea nu se mai acordă puncte)

Exemplu:

errorin.txt

1

7 5

errorout.txt

4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Explicație

7/5=1,40000000000000000000…

Rezolvare

<syntaxhighlight lang="python"> def citeste_date():

   with open("errorin.txt", "r") as infile:
       n = int(infile.readline())
       date = []
       for _ in range(n):
           a, b = map(int, infile.readline().split())
           date.append((a, b))
   return n, date


def calculeaza_resturi_si_transport(n, date):

   c = [0] * 31
   for a, b in date:
       r = a % b
       for j in range(1, 31):
           c[j] += (r * 10) // b
           r = (r * 10) % b
   return c

def efectueaza_transport_si_scrie_rezultatul(c):

   t = 0
   for j in range(30, 0, -1):
       r = (c[j] + t) % 10
       t = (c[j] + t) // 10
       c[j] = r
   with open("errorout.txt", "w") as outfile:
       for j in range(1, 21):
           outfile.write(f"{c[j]} ")

def main():

   n, date = citeste_date()
   c = calculeaza_resturi_si_transport(n, date)
   efectueaza_transport_si_scrie_rezultatul(c)

if __name__ == "__main__":

   main()

</syntaxhighlight>