Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
2439 - T Bile
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Roboțelul Nino a primit cadou un dispozitiv care inscripționează bile. Dispozitivul poate fi încărcat cu n bile, ce vor fi inscripționate în ordine, cu numerele <code>1</code>, <code>2</code>, …, <code>n</code>. Nino trebuie să împartă bilele inscripționate în două șiruri, <code>X</code> și <code>Y</code>, astfel: - La primul pas Nino va pune în primul șir bila cu numărul <code>1</code> (<code>X[1] = 1</code>), iar în al doilea șir bila cu numărul <code>2</code> (<code>Y[1] = 2</code>). - La al doilea pas Nino va pune în primul șir bila cu numărul <code>3</code> (<code>X[2] = 3</code>), iar în al doilea șir bila cu numărul <code>4</code> (<code>Y[2] = 4</code>). - La fiecare pas <code>i ≥ 3</code> Nino va pune în șirul <code>X</code> bila <code>X[i] = X[i-1] + Y[i-1]</code>, iar în șirul <code>Y</code>, în ordine crescătoare, bilele numerotate cu <code>X[i-1]+1</code>, <code>X[i-1]+2</code>, …, <code>X[i]-1</code>, cu excepția bilei <code>4</code> care a fost pusă deja. Dacă la un pas <code>k</code>, <code>X[k] > n</code>, bilele rămase vor fi inscripționate cu valorile <code>X[k-1]+1</code>, <code>X[k-1]+2</code>, …, <code>n</code> și vor fi puse în șirul <code>Y</code>. Pentru că bilele se rostogolesc, Nino împachetează în tuburi verticale de culoare galbenă, bilele din primul șir, iar în tuburi verticale de culoare roșie, bilele din al doilea șir. În fiecare tub încap cel mult <code>m</code> bile, dispuse pe o singură coloană. Tuburile sunt așezate vertical, întâi cele galbene, în ordinea umplerii, apoi cele roșii în ordinea umplerii lor. Bilele de la baza fiecărui tub formează nivelul <code>1</code>, cele situate imediat deasupra lor formează nivelul <code>2</code> etc., nivelul maxim putând fi <code>m</code>. = Cerința = Se dau numerele naturale <code>n</code> și <code>m</code> și se cere să se determine: 1. Numărul de tuburi de culoare roșie necesare pentru a împacheta bilele din șirul <code>Y</code> și numărul total de bile conținute de acestea. 2. Pentru un nivel <code>v</code> dat, suma numerelor inscripționate pe bilele de pe nivelul <code>v</code>. = Date de intrare = Fișierul de intrare <code>tbile.in</code> conţine pe prima linie un număr natural <code>c</code> reprezentând cerința care trebuie să fie rezolvată (<code>1</code> sau <code>2</code>), pe a doua linie un număr natural <code>n</code>, reprezentând numărul de bile ce se inscripționează, iar pe cea de a treia linie un număr natural <code>m</code>, reprezentând numărul de bile care încap într-un tub. Dacă cerința este <code>c = 2</code>, fișierul de intrare conține, în plus, pe a patra linie, un număr natural <code>v</code> reprezentând numărul unui nivel. = Date de ieșire = Dacă cerința este <code>c = 1</code>, atunci, pe prima linie a fișierului <code>tbile.out</code>, vor fi scrise două numere naturale, separate printr-un spațiu, reprezentând, în această ordine, numărul de tuburi de culoare roșie necesare pentru a împacheta bilele din șirul <code>Y</code>, respectiv, numărul total de bile conținute de acestea. Dacă cerința este <code>c = 2</code>, atunci, pe prima linie a fișierului <code>tbile.out</code> va fi scris un număr natural reprezentând suma numerelor inscripționate pe bilele de pe nivelul <code>v</code>. = Restricții și precizări = * <code>5 ≤ n ≤ 2 000 000 000</code> * <code>1 ≤ c ≤ m ≤ 311445015</code> * Se acordă <code>30</code> de puncte pentru rezolvarea corectă a cerinței 1 și <code>60</code> de puncte pentru rezolvarea corectă a cerinței 2. * În concurs s-au acordat <code>10</code> puncte din oficiu. Aici se acordă punctele pentru exemplele din enunț. = Exemplul 1: = <code>tbile.in</code> 1 36 5 <code>tbile.out</code> 6 29 === Explicație === Primul șir va conține <code>7</code> bile (<code>1</code>, <code>3</code>, <code>7</code>, <code>12</code>, <code>18</code>, <code>26</code>, <code>35</code>), iar cel de al doilea <code>36-7=29</code> de bile (ca în figura de mai sus). Sunt necesare <code>6</code> tuburi de capacitate <code>5</code>. = Exemplul 2: = <code>tbile.in</code> 2 36 5 3 <code>tbile.out</code> 126 === Explicație === Pe nivelul <code>3</code> se găsesc bilele inscripționate cu numerele <code>7</code>, <code>5</code>, <code>11</code>, <code>17</code>, <code>23</code>, <code>29</code> și <code>34</code>. Suma acestor valori este <code>126</code>. <syntaxhighlight lang="python" line="1"> def calculate_balls_and_tubes(n, m, v): # Initialize X and Y X = [1] Y = [2] current_num = 3 # Build X and Y sequences while True: if len(X) < 2: X.append(current_num) current_num += 1 else: next_x = X[-1] + Y[-1] if next_x > n: break X.append(next_x) for i in range(X[-2] + 1, next_x): if i != 4: Y.append(i) current_num = next_x + 1 # Add remaining balls to Y for i in range(X[-1] + 1, n + 1): if i != 4: Y.append(i) # Number of red tubes and total balls in Y red_tubes = (len(Y) + m - 1) // m total_balls_in_red_tubes = len(Y) # Calculate the sum of the numbers on level v sum_on_level_v = 0 # Yellow tubes (X balls) for i in range(len(X)): if (i // m) + 1 == v: sum_on_level_v += X[i] # Red tubes (Y balls) for i in range(len(Y)): if (i // m) + 1 == v: sum_on_level_v += Y[i] return red_tubes, total_balls_in_red_tubes, sum_on_level_v # Exemplu de utilizare n = 10 # numărul total de bile m = 3 # capacitatea unui tub v = 2 # nivelul dorit red_tubes, total_balls_in_red_tubes, sum_on_level_v = calculate_balls_and_tubes(n, m, v) print(f"Numărul de tuburi roșii necesare: {red_tubes}") print(f"Numărul total de bile din tuburile roșii: {total_balls_in_red_tubes}") print(f"Suma numerelor inscripționate pe bilele de pe nivelul {v}: {sum_on_level_v}") </syntaxhighlight>
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width