4079 - Ceas 1

From Bitnami MediaWiki

Sursa: [1]

Enunt[edit | edit source]

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[edit | edit source]

Determinați numărul total de apariții ale cifrei X pe plăcuțe ı̂nainte de tăiere.

Cerința 2[edit | edit source]

Determinați numărul de tăieturi realizate conform enunțului.

Date de intrare[edit | edit source]

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[edit | edit source]

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[edit | edit source]

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:[edit | edit source]

ceas.in

1 0 6 1010 40 201 5123 31 6 ceas.out

4

Explicație[edit | edit source]

Pe plăcuțe cifra 0 apare de patru ori.

Exemplul 2:[edit | edit source]

ceas.in

2 0 6 120 40 201 5123 31 6 ceas.out

7

Explicație[edit | edit source]

Î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[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 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


  1. 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>