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
Npentru 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
Kpuncte.
Restricții și precizări
10 ≤ N ≤ 101514 ≤ 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.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Imprimanta:
//Marinel Serban
//O(k)
#include <fstream>
using namespace std;
ifstream fin("imprimanta.in");
ofstream fout("imprimanta.out");
long long N, K, s_max, s;
int cifra, ace, min_ace = 25, max_cifra, i;
int main()
{
fin >> N >> K;
//punctul a)
while (N)
{
cifra = N % 10;
N /= 10;
switch (cifra)
{
case 0:
case 6:
case 9: ace = 12; break;
case 1: ace = 5; break;
case 2:
case 3:
case 5: ace = 11; break;
case 4: ace = 9; break;
case 7: ace = 7; break;
case 8: ace = 13; break;
}
if (ace < min_ace)
{
min_ace = ace;
switch (ace)
{
case 12: max_cifra = cifra; break;
case 11: max_cifra = cifra; break;
case 5: max_cifra = 1; break;
case 7: max_cifra = 7; break;
case 9: max_cifra = 4; break;
case 13: max_cifra = 8; break;
}
}
else
if (ace == min_ace)
switch (ace)
{
case 12: if (cifra>max_cifra) max_cifra = cifra; break;
case 11: if (cifra>max_cifra) max_cifra = cifra; break;
}
}
fout << max_cifra << '\n';
//punctul b)
if (K % 5 == 0)
for (i = 1; i <= K / 5; ++i) fout << 1; //numai 1
else
if (K % 5 == 1)
{
if (K == 16) fout << 74; //caz particular
else
{
fout << 777; //21 ace (3 * 7)
for (i = 1; i <= (K - 21) / 5; ++i) fout << 1;//restul 1 (cate 5 ace)
}
}
else
if (K % 5 == 2)
{
fout << 7; //7 ace (2+5)
for (i = 1; i <= (K - 7) / 5; ++i) fout << 1; //restul 1
}
else
if (K % 5 == 3)
{
fout << 8; //13 ace (3+2*5)
for (i = 1; i <= (K - 13)/ 5; ++i) fout << 1; //restul 1
}
else
{
fout << 77; //9 ace (4+5)
for (i = 1; i <= (K - 14) / 5; ++i) fout << 1;
}
fout << '\n';
fout.close();
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa
.
Rezolvarea problemei #1045 Imprimanta
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1045 Imprimanta de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!