Problema de pe pbinfo 1045:
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.

Răspunsuri la întrebare
#include <fstream>
using namespace std;
int x[10] = {12, 5, 11, 11, 9, 11, 12, 7, 13, 12};
int main() {
ifstream cin("imprimanta.in");
ofstream cout("imprimanta.out");
unsigned long long a;
int k, maxcif = -1, minap = 14, nrmaxcif, pramas;
cin >> a >> k;
cin.close();
while (a) {
if (x[a % 10] < minap) {
maxcif = a % 10;
minap = x[a % 10];
}
else
if (x[a % 10] == minap)
if (a % 10 > maxcif)
maxcif = a % 10;
a /= 10;
}
cout << maxcif << '\n';
nrmaxcif = k / 5;
pramas = k % 5;
if (pramas == 0) {
for (int i = 1; i <= nrmaxcif; i++) cout << 1;
return 0;
}
else
if (pramas == 1) {
if (k == 16) {
cout << 74;
return 0;
}
else {
cout << 777;
for (int i = 1; i <= nrmaxcif - 4; i++) cout << 1;
return 0;
}
}
else
if (pramas == 2) {
cout << 7;
for (int i = 1; i <= nrmaxcif - 1; i++) cout << 1;
return 0;
}
else
if (pramas == 3) {
cout << 8;
for (int i = 1; i <= nrmaxcif - 2; i++) cout << 1;
return 0;
}
else {
cout << 77;
for (int i = 1; i <= nrmaxcif - 2; i++) cout << 1;
return 0;
}
}