fbpx

Problema #1618 – Cifre12 – Rezolvari PBInfo

de Mihai-Alexandru

Un indicator numeric este un dispozitiv de afişaj electronic destinat afişării unei cifre zecimale.

Un indicator numeric este un dispozitiv de afişaj electronic destinat afişării unei cifre zecimale.
Acesta conține 7 segmente notate cu a, b, c, d, e, f, g, ca în figura de mai jos.

Afişarea unei cifre se face prin aprinderea unei combinații de segmente conform tabelului:

Cifră 0 1 2 3 4 5 6 7 8 9
Segmente aprinse a,b,c,d,e,f b,c a,b,d,e,g a,b,c,d,g b,c,f,g a,c,d,f,g a,c,d,e,f,g a,b,c a,b,c,d,e,f,g a,b,c,d,f,g

Cerința

Cunoscând un număr natural N afișat cu ajutorul mai multor indicatoare numerice, să se scrie un program care determină:

  1. Numărul de segmente aprinse pentru afișarea numărului N.
  2. Numărul de numere distincte mai mari decât N,ce se pot forma prin aprinderea a cel puțin unui segment în plus, față de cele utilizate pentru afișarea numărului N, fără a folosi alte indicatoare numerice, și fără a stinge niciun segment dintre cele deja aprinse.

Date de intrare

Fișierul de intrare cifre12.in conține pe prima linie numărul natural V a cărui valoare poate fi doar 1 sau 2, iar pe a doua linie numărul natural N.

Date de ieșire

Fișierul de ieșire este cifre12.out.

Dacă valoarea lui V este 1 atunci fişierul de ieşire va conţine pe prima linie un singur număr natural ce reprezintă numărul de segmente aprinse pentru afișarea numărului N.

Dacă valoarea lui V este 2 atunci fişierul de ieşire va conține pe prima linie un singur număr natural reprezentând numărul de numere distincte mai mari decât N, ce se pot forma prin aprinderea a cel puțin unui segment în plus, față de cele utilizate pentru afișarea numărului N, fără a folosi alte indicatoare numerice.

Restricții și precizări

  • 10 ≤ N ≤ 1019
  • 20% din teste vor avea valoarea V = 1, iar 80% din teste vor avea valoarea V = 2.

Exemplul 1

cifre12.in

1 
823

cifre12.out

17

Explicație

V = 1, deci se rezolvă NUMAI prima cerință. N = 823;

Pentru afișarea cifrei 8 s-au aprins 7 segmente, pentru cifra 2 s-au aprins 5 segmente și pentru cifra 3 tot 5 segmente. În total s-au aprins 17 segmente.

Exemplul 2

cifre12.in

2
823

cifre12.out

5

Explicație

V = 2, deci se rezolvă NUMAI a doua cerință. N = 823;

Din cifra 8 nu se mai pot obține alte cifre prin aprinderea de noi segmente.
Din cifra 2 se poate obține cifra 8 iar din cifra 3 se pot obține cifrele 8 și 9 prin aprinderea de noi segmente. Așadar, se pot obține 5 numere mai mari ca 823: 828, 829, 883, 888, 889.

#include <bits/stdc++.h>

using namespace std;


int c[]={6, 2, 5, 5, 4, 5, 6, 3, 7, 6 };
int t[]={2, 7, 2, 3, 3, 4, 2, 5, 1, 2};
int mm[]={1, 5, 1, 2, 2, 3, 1, 2, 0, 0 };
int cif[25];
char s[25];
unsigned long long p,sol;
ifstream fin ("cifre12.in");
ofstream fout ("cifre12.out");
int main()
{

    int t1,k=0,sum=0,g;
    fin >> t1;
    fin >> s;
    for (k=0;s[k];++k)
        cif[k]=s[k]-'0';
    if(t1==1)
    {
        for (int i=0;i<k;++i)
            sum +=c[cif[i]];
        fout << sum;
    }
    else
    {
        for (int i=0;i<k;++i)
        {
            p=1;
            for (int j=i+1;j<k;j++)
            {
                g=cif[j];
                p=p*t[g];
            }

            sol +=mm[cif[i]] *p;
        }
        fout << sol;
    }
    return 0;


}
Comentarii

S-ar putea sa iti placa