#1730
Numim număr sstabil orice număr natural care este format dintr-o singură cifră sau care are suma oricăror două cifre vecine strict mai mare decât nouă.
Asupra oricărui număr care nu este sstabil se pot efectua operaţii de înlocuire a oricăror două cifre vecine care au suma strict mai mică decât zece cu o cifră egală cu suma lor.
Operaţiile de înlocuire pot fi aplicate, în acelaşi condiţii, şi asupra numerelor rezultate după fiecare înlocuire, de câte ori este nevoie, până când se obţine un număr sstabil.
De exemplu, 291 este număr sstabil deoarece 2+9>9 şi 9+1>9, iar 183 nu este sstabil pentru că 1+8<10. Din numărul 2453, efectuând o singură înlocuire, putem obţine 653 sau 293 (număr sstabil) sau 248. Numărul 653, nefiind sstabil, permite o nouă operaţie de înlocuire, obţinând astfel numărul 68, care este sstabil. Analog, din numărul 248 se poate obţine numărul sstabil 68.
Scrieţi un program care să determine cel mai mare număr natural sstabil care se poate obţine dintr-un număr natural dat, aplicând una sau mai multe operaţii de înlocuire de tipul menţionat.
| Problema | Sstabil | Operații I/O |
sstabil.in/sstabil.out
|
|---|---|---|---|
| Limita timp | 1 secunde | Limita memorie |
Total: 16 MB
/
Stivă 4 MB
|
| Id soluție | #58794825 | Utilizator | |
| Fișier | sstabil.cpp | Dimensiune | 4.98 KB |
| Data încărcării | 10 August 2025, 00:23 | Scor/rezultat | Eroare de compilare |
sstabil.cpp:22:1: error: 'map' in namespace 'std' does not name a type std::map<std::pair<int, int>, bool> memo; ^ sstabil.cpp: In function 'bool is_better(int, int)': sstabil.cpp:26:9: error: 'memo' was not declared in this scope if (memo.count({idx1, idx2})) return memo[{idx1, idx2}]; ^ sstabil.cpp:32:16: error: 'memo' was not declared in this scope return memo[{idx1, idx2}] = (s1.len > s2.len); ^ sstabil.cpp:37:16: error: 'memo' was not declared in this scope return memo[{idx1, idx2}] = (s1.last_digit > s2.last_digit); ^ sstabil.cpp:41:17: error: 'memo' was not declared in this scope return memo[{idx1, idx2}] = true; ^ sstabil.cpp:44:16: error: 'memo' was not declared in this scope return memo[{idx1, idx2}] = false; ^ sstabil.cpp:48:12: error: 'memo' was not declared in this scope return memo[{idx1, idx2}] = (s1.last_digit > s2.last_digit); ^ sstabil.cpp: In function 'int main()': sstabil.cpp:73:11: error: no match for 'operator=' (operand types are '__gnu_cxx::__alloc_traits<std::allocator<State> >::value_type {aka State}' and '<brace-enclosed initializer list>') dp[0] = {0, 10, -1}; // last_digit=10 pentru a trece orice test sstabil la prima cifră ^ sstabil.cpp:73:11: note: candidates are: sstabil.cpp:9:8: note: State& State::operator=(const State&) struct State { ^ sstabil.cpp:9:8: note: no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const State&' sstabil.cpp:9:8: note: State& State::operator=(State&&) sstabil.cpp:9:8: note: no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'State&&' sstabil.cpp:147:48: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (int i = 0; i < result_digits.size(); ++i) { ^ sstabil.cpp: In function 'bool is_better(int, int)': sstabil.cpp:49:1: warning: control reaches end of non-void function [-Wreturn-type] } ^
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema Sstabil face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.