CCCPaste

7segmente #1537

#include 
using namespace std;
ifstream cin("7segmente.in");
ofstream cout("7segmente.out");
string n;
int v[] = {0, 2, 5, 5, 4, 5, 6, 3, 7, 6};
int c1(string n)
{
    int sol = 0;
    for(char c : n)
        sol+=v[(c-'0')%10];
    return sol;
}
int main()
{
    long long p, len;
    cin >> n >> p;
    cout << c1(n) << ' ';
    len = n.length();
    /// Acum cerinta 2.
    /// Cel mai mare numar care foloseste mai putin de p si <=n

    /// Prioritati
    // 1) Numarul de cifre.
    // 2) Cifra cea mai semnificativa sa fie mai mica sau egala cu cea a lui n.
    /// Daca nu putem avea la fel de mult cifre ca n
    if(p / 2 < len)
    {
        /// Prin acestea asiguram numarul cu cat mai multe cifre de valoare maxima!
        /// Daca putem, inlocuim primul '1' cu '7'.
        if(p%2==1)
            cout << 7, p-=3; // 3 mW
        for(int i = 1;i<=p/2;i++)
            cout << 1; // 2 mW.
    }
    else
    {
        string sol = "";
        for(int i = 0;i= v[j])
                        added = j + '0';
                }
                p = p + 2 - v[(added - '0')]; /// nu mai folosim 1 si folosim cifra added.
                sol[i] = added;
            }
            else
            {
                for(int j = 1;j <= (n[i] - '0');j++)
                {
                    if(p + 2 >= v[j])
                        added = j+'0';
                }
                if(added!= n[i])
                    maximum = false;
                p = p + 2 - v[(added-'0')];
                sol[i] = added;
            }
        }
        cout << sol;

    }
    return 0;
}