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
4079 - Ceas 1
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!
Sursa: [https://www.pbinfo.ro/probleme/4079/ceas1] ==Enunt== Un atelier de fabricat ceasuri cu cuc are nevoie de plăcuțe cu numerele pentru orele pe care trebuie să le așeze pe discul ceasurilor. Aceste numere sunt realizate la o imprimantă. Din cauza unei erori imprimanta tipărește plăcuțe cu numere naturale, unele mai mari ca 12. Atelierul poate utiliza doar plăcuțe cu numere cuprinse ı̂ntre 0 și 12. Pentru a utiliza aceste numere este nevoie ca ele să fie tăiate ı̂ncepând din partea dreaptă ı̂n grupuri de maximum două cifre, fiecare grup reprezentând valoarea de pe o plăcuță, care să fie o cifră la 0 la 9 sau unul dintre numerele 10, 11, 12. Dacă pe o plăcuță se găsește un număr mai mare ca 12 atunci plăcuța trebuie tăiată, astfel ı̂ncât ı̂n urma tăierii să se obțină numere de cel mult 2 cifre. Dacă ı̂n numărul de pe o plăcuță cifra zecilor este 0, atunci la prima tăiere se ia doar cifra unităților, altfel dacă numărul format cu cifra zecilor și unităților este mai mare ca 12, atunci se taie prima dată cifra unităților, iar dacă numărul format cu cifra zecilor și unităților este 10, 11 sau 12 se taie prima dată numărul format din ultimele două cifre, apoi procedeul se repetă până la tăierea completă a plăcuței. Imprimanta a realizat N plăcuțe. De exemplu dacă plăcuța este 12030, după tăiere se obțin 0, 3, 0, 12. ==Cerința 1== Determinați numărul total de apariții ale cifrei X pe plăcuțe ı̂nainte de tăiere. ==Cerința 2== Determinați numărul de tăieturi realizate conform enunțului. ==Date de intrare== Pe prima linie a fișierului ceas.in se află valorile C, X și N separate prin câte un singur spațiu. Pe linia a doua se află N numere naturale separate prin câte un singur spațiu, având semnificația din enunț. Pentru C = 1 se rezolvă doar cerința 1, iar pentru C = 2 se rezolvă doar cerința 2. ==Date de ieșire== Fișierul ceas.out conține pe prima linie un singur număr natural care reprezintă valoarea calculată conform cerinței. ==Restricții și precizări== 1 ≤ N ≤ 100.000 0 ≤ X ≤ 9 Valorile din șir sunt numere naturale ≤ 50.000 Pentru testele în care avem C=2 valoarea X este prezentă în fișierul de intrare chiar dacă nu este folosită în rezolvare. Pentru teste în valoare de 39 de puncte avem C = 1 Pentru teste în valoare de 61 de puncte avem C = 2 ==Exemplul 1:== ceas.in 1 0 6 1010 40 201 5123 31 6 ceas.out 4 ==Explicație== Pe plăcuțe cifra 0 apare de patru ori. ==Exemplul 2:== ceas.in 2 0 6 120 40 201 5123 31 6 ceas.out 7 ==Explicație== În ordinea tăierilor se obțin: 0,12; 0,4; 1,0,2; 3,12,5; 1,3; 6. Numărul de tăieturi este 7. ==Încărcare soluție== <syntaxhighlight lang="python" line> # definim o functie care returneaza lista de placute obtinuta in urma taietorilor def taie_placuta(placuta): placute_noi = [] # lista de placute noi while placuta: # cat timp mai avem cifre pe placuta initiala if placuta < 10: # daca avem o singura cifra placute_noi.append(placuta) # adaugam placuta noua break # nu mai avem cifre elif placuta <= 12: # daca avem 2 cifre si sunt <= 12 placute_noi.append(placuta) # adaugam placuta noua break # nu mai avem cifre else: # daca avem 2 cifre si sunt > 12 if placuta % 10 == 0: # daca cifra unitatilor este 0 placute_noi.append(placuta // 10) # adaugam cifra zecilor placuta = placuta // 10 # trecem la urmatoarea cifra elif placuta % 100 in [10, 11, 12]: # daca avem numerele 10, 11, 12 placute_noi.append(placuta % 100) # adaugam cele 2 cifre placuta = placuta // 100 # trecem la urmatoarea cifra else: # daca avem 2 cifre si nu sunt 10, 11 sau 12 placute_noi.append(placuta % 10) # adaugam cifra unitatilor placuta = placuta // 10 # trecem la urmatoarea cifra return placute_noi # citim datele de intrare C, X, N = map(int, input().split()) placute = list(map(int, input().split())) if C == 1: # daca trebuie sa rezolvam cerinta 1 aparitii_X = 0 # initializam numarul de aparitii ale cifrei X cu 0 for placuta in placute: # pentru fiecare placuta while placuta: # cat timp mai avem cifre pe placuta if placuta % 10 == X: # </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