4079 - Ceas 1

De la Universitas MediaWiki

Sursa: [1]

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

# 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: #