Advertisement
Hezov

7segmente #1537

Dec 3rd, 2024
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.03 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3. ifstream cin("7segmente.in");
  4. ofstream cout("7segmente.out");
  5. string n;
  6. int v[] = {0, 2, 5, 5, 4, 5, 6, 3, 7, 6};
  7. int c1(string n)
  8. {
  9.     int sol = 0;
  10.     for(char c : n)
  11.         sol+=v[(c-'0')%10];
  12.     return sol;
  13. }
  14. int main()
  15. {
  16.     long long p, len;
  17.     cin >> n >> p;
  18.     cout << c1(n) << ' ';
  19.     len = n.length();
  20.     /// Acum cerinta 2.
  21.     /// Cel mai mare numar care foloseste mai putin de p si <=n
  22.  
  23.     /// Prioritati
  24.     // 1) Numarul de cifre.
  25.     // 2) Cifra cea mai semnificativa sa fie mai mica sau egala cu cea a lui n.
  26.     /// Daca nu putem avea la fel de mult cifre ca n
  27.     if(p / 2 < len)
  28.     {
  29.         /// Prin acestea asiguram numarul cu cat mai multe cifre de valoare maxima!
  30.         /// Daca putem, inlocuim primul '1' cu '7'.
  31.         if(p%2==1)
  32.             cout << 7, p-=3; // 3 mW
  33.         for(int i = 1;i<=p/2;i++)
  34.             cout << 1; // 2 mW.
  35.     }
  36.     else
  37.     {
  38.         string sol = "";
  39.         for(int i = 0;i<len;i++)
  40.             sol+='1';
  41.         /// Scadem costul folosit.
  42.         p -= len*2;
  43.  
  44.         /// incercam sa formam chiar n.
  45.         bool maximum = true;
  46.         for(int i = 0;i<len;i++)
  47.         {
  48.             char added = '1';
  49.             if(!maximum) /// mereu incercam sa luam cifra maxima cu bugetul ramas
  50.             {
  51.                 for(int j = 2;j<=9;j++)
  52.                 {
  53.                     if(p + 2 >= v[j])
  54.                         added = j + '0';
  55.                 }
  56.                 p = p + 2 - v[(added - '0')]; /// nu mai folosim 1 si folosim cifra added.
  57.                 sol[i] = added;
  58.             }
  59.             else
  60.             {
  61.                 for(int j = 1;j <= (n[i] - '0');j++)
  62.                 {
  63.                     if(p + 2 >= v[j])
  64.                         added = j+'0';
  65.                 }
  66.                 if(added!= n[i])
  67.                     maximum = false;
  68.                 p = p + 2 - v[(added-'0')];
  69.                 sol[i] = added;
  70.             }
  71.         }
  72.         cout << sol;
  73.  
  74.     }
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement