Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- 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<len;i++)
- sol+='1';
- /// Scadem costul folosit.
- p -= len*2;
- /// incercam sa formam chiar n.
- bool maximum = true;
- for(int i = 0;i<len;i++)
- {
- char added = '1';
- if(!maximum) /// mereu incercam sa luam cifra maxima cu bugetul ramas
- {
- for(int j = 2;j<=9;j++)
- {
- if(p + 2 >= 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;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement