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
1185 - Cub2
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!
Sărbătorile de iarnă tocmai s-au încheiat. Florinel dorește să-și ajute părinții la despodobirea bradului. Tubul luminos pe care l-au folosit anul acesta este mai special. Are <code>N<sup>3</sup></code> becuri luminoase numerotate de la <code>1</code> la <code>N<sup>3</sup></code>, iar fiecare bec care este inscripționat cu un număr prim, va rămâne mereu aprins. Cutia în care trebuie strâns tubul este un cub de latură <code>N</code>. Becul cu numărul <code>1</code>, trebuie pus în colțul de coordonate <code>(1,1,1)</code>, restul în spirală până la umplerea nivelului, apoi nivelul următor în sens invers, ș.a.m.d. === Exemplu – <code>N = 3</code> === '''Nivel 1''' 1 2 3 8 9 4 7 6 5 '''Nivel 2''' 18 17 16 11 10 15 12 13 14 '''Nivel 3''' 19 20 21 26 27 22 25 24 23 '''Fața 1 (spate)''' 21, 20, 19, 16, 17, 18, 3, 2, 1 '''Fața 2 (dreapta)''' 23, 22, 21 14, 15, 16, 5, 4, 3, '''Fața 3 (frontal)''' 25, 24, 23, 12, 13, 14, 7, 6, 5, '''Fața 4 (stânga)''' 19, 26, 25, 18, 11, 12, 1, 8, 7, = Cerința = Cunoscând latura <code>N</code> a cubului, să se umple cubul cu tubul luminos (becurile fiind legate crescător), apoi să se determine: 1. Coordonatele <code>(x,y,z)</code> ale becului cu numărul <code>V</code>. (<code>x</code>-linia, <code>y</code>-coloana, <code>z</code>-înălțimea) 2. Numărul de becuri luminoase situate pe fiecare față a cubului. = Date de intrare = Fişierul de intrare <code>cub2.in</code> conţine pe prima linie un număr natural <code>p</code>. Pentru toate testele de intrare, numărul <code>p</code> poate avea doar valoarea <code>1</code> sau valoarea <code>2</code>. Pe a doua linie a fișierului de intrare, sunt scrise două numere naturale <code>N</code> și <code>V</code> separate printr-un spațiu reprezentând dimensiunea cubului și valoarea becului pentru care trebuie determinate coordonatele. = Date de ieșire = Dacă valoarea lui <code>p</code> este <code>1</code>, se va rezolva numai cerinţa 1. În acest caz, în fişierul de ieşire <code>cub2.out</code> se vor scrie trei numere naturale <code>x y z</code>, separate prin câte un spațiu, reprezentând coordonatele becului cu valoarea <code>V</code>. Dacă valoarea lui <code>p</code> este <code>2</code>, se va rezolva numai cerinţa <code>2</code>. În acest caz, fişierul de ieşire <code>cub2.out</code> va conține <code>4</code> linii. Pe fiecare linie <code>i</code>, se va scrie câte un număr natural <code>f<sub>i</sub></code>, reprezentând numărul de becuri inscripționate cu numere prime de pe fața <code>i</code>. natural <code>f<sub>i</sub></code>, reprezentând numărul de becuri inscripționate cu numere prime de pe fața <code>i</code>. = Restricții și precizări = * <code>1 ≤ N ≤ 200</code> * <code>1 ≤ V ≤ N<sup>3</sup></code> * Pentru rezolvarea corectă a primei cerinţe se acordă 20 de puncte, iar pentru cerința a doua se acordă 80 de puncte. * Pentru 20% dintre teste: <code>1 ≤ N ≤ 20</code> * Pentru 30% dintre teste: <code>21 ≤ N ≤ 100</code> * Pentru 50% dintre teste: <code>101 ≤ N ≤ 200</code> = Exemple = <code>cub2.in</code> 1 3 10 <code>cub2.out</code> 2 2 2 = Explicație = '''Atenție! Pentru acest test se rezolvă doar cerința 1).''' linia <code>2</code>, coloana <code>2</code>, nivel <code>2</code> – este becul <code>10</code> <code>cub2.in</code> 2 3 10 <code>cub2.out</code> 4 3 4 3 = Explicație = '''Atenție! Pentru acest test se rezolvă doar cerința 2).''' <code>4</code> – becuri inscripționate cu numere prime pe fața 1: <code>2, 3, 17, 19</code> <code>3</code> – becuri inscripționate cu numere prime pe fața 2: <code>3, 5, 23</code> <code>4</code> – becuri inscripționate cu numere prime pe fața 3: <code>5, 7, 13, 23</code> <code>3</code> – becuri inscripționate cu numere prime pe fața 4: <code>7, 11, 19</code> <syntaxhighlight lang="python" line="1"> def generate_spiral_layer(n, start_val): """ Generate a spiral layer of size n x n starting from start_val """ layer = [[0] * n for _ in range(n)] num = start_val for layer_idx in range((n + 1) // 2): for i in range(layer_idx, n - layer_idx): layer[layer_idx][i] = num num += 1 for i in range(layer_idx + 1, n - layer_idx): layer[i][n - layer_idx - 1] = num num += 1 for i in range(n - layer_idx - 2, layer_idx - 1, -1): layer[n - layer_idx - 1][i] = num num += 1 for i in range(n - layer_idx - 2, layer_idx, -1): layer[i][layer_idx] = num num += 1 return layer def generate_cube(N): """ Generate a cube of size N x N x N filled in spiral order """ cube = [[[0] * N for _ in range(N)] for _ in range(N)] num = 1 for z in range(N): layer = generate_spiral_layer(N, num) for y in range(N): for x in range(N): cube[z][y][x] = layer[y][x] num += N * N return cube def find_coordinates(cube, V): """ Find coordinates (x, y, z) of the value V in the cube """ N = len(cube) for z in range(N): for y in range(N): for x in range(N): if cube[z][y][x] == V: return (x + 1, y + 1, z + 1) return None def count_lights_on_faces(cube): """ Count the number of lights on each face of the cube """ N = len(cube) counts = {'front': 0, 'back': 0, 'left': 0, 'right': 0, 'top': 0, 'bottom': 0} # Counting lights on each face for z in range(N): counts['top'] += N counts['bottom'] += N for y in range(N): counts['front'] += N counts['back'] += N for x in range(N): counts['left'] += N counts['right'] += N return counts # Example Usage N = 3 V = 7 # Example value to find coordinates for cube = generate_cube(N) coordinates = find_coordinates(cube, V) face_counts = count_lights_on_faces(cube) print(f"Coordinates of the light with number {V}: {coordinates}") print(f"Number of lights on each face: {face_counts}") </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