1045 - Imprimanta

De la Universitas MediaWiki

Sursa: [1]

Enunt

Cif-Oji6 este o imprimantă matriceală numită şi imprimantă cu ace, deoarece tipărirea se realizează prin impactul acelor capului de imprimare pe o bandă cu tuş. Acele sunt aranjate într-o grilă dreptunghiulară formată din 5 rânduri de ace, pe fiecare rând aflându-se la distanţe egale câte 3 ace, aşa cum se observă în figura alăturată. Prin acţionarea diferitelor combinaţii de ace din grilă, se defineşte forma fiecărei cifre ce permite tipărirea acesteia prin puncte, în felul următor: De exemplu, cifra 2 va fi tipărită prin 11 puncte ca rezultat al acţionării a 11 ace din grilă: din primul rând de ace al grilei se vor acţiona toate cele 3 ace, din următorul rând doar acul din dreapta, apoi de pe următorul rând toate cele 3 ace, apoi acul din stânga de pe penultimul rând iar din ultimul rând toate cele 3 ace.

Cerințe

a) Ştiind că imprimanta Cif-Oji6 a tipărit numărul N, determinaţi care este cea mai mare cifră a numărul N pentru care s-a acţionat un număr minim de ace ale grilei. b) Ştiind că imprimanta mai are tuş pe bandă doar pentru imprimarea a K puncte, determinaţi cel mai mare număr natural ce poate fi tipărit prin exact K puncte.

Date de intrare

Fișierul de intrare imprimanta.in conține pe prima linie două numere naturale N şi K separate printr-un spaţiu, unde N reprezintă numărul tipărit de imprimantă iar K numărul de puncte pentru care imprimanta mai are tuş.

Date de ieșire

Fișierul de ieșire imprimanta.out va conține:

pe prima linie un singur număr natural ce reprezintă cea mai mare cifră a numărul N pentru care s-a acţionat un număr minim de ace ale grilei. pe cea de-a doua linie a fişierului se va scrie cel mai mare număr natural ce poate fi tipărit prin K puncte. Restricții și precizări 10 ≤ N ≤ 1015 14 ≤ K ≤ 100000 Pentru rezolvarea corectă a cerinţei a) se acordă 30% din punctajul fiecărui test iar pentru rezolvarea corectă a cerinţei b) se acordă 70% din punctajul fiecărui test.

Exemplul 1

imprimanta.in

2852 16 imprimanta.out

5 74

Explicație

Pentru tipărirea cifrei 2 s-au acţionat 11 ace, pentru cifra 8 s-au acţionat 13 ace iar pentru cifra 5 tot 11 ace. Numărul minim de ace pentru tipărirea unei cifre este 11. 5 este cea mai mare cifră a numărului 2852 ce a fost tipărită cu 11 ace. Cel mai mare număr natural ce poate fi tipărit prin 16 puncte este 74 7 puncte (pentru cifra 7) + 9 puncte (pentru cifra 4) = 16 puncte.

Exemplul 2

imprimanta.in

88 25 imprimanta.out

8 11111

Explicație

Pentru tipărirea cifrei 8 s-au acţionat 13 ace. Cel mai mare număr natural ce poate fi tipărit prin 25 de puncte este 11111 5* (5 puncte pentru cifra 1) = 25 puncte.

Solutie

def count_points(n, digits):
    points = 0
    for d in str(n):
        points += digits[d]
    return points
def find_min_digit(digits):
    min_digit = 9
    min_ace = float('inf')
    for i in range(9, -1, -1):
        if digits[i] <= min_ace:
            min_ace = digits[i]
            min_digit = i
        if digits[i] > min_ace:
            break
    return min_digit