fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <algorithm>
  5. #include <functional>
  6. using namespace std;
  7.  
  8. vector<string> litery = {"", "", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"};
  9.  
  10. int main() {
  11. string numer;
  12. long long K;
  13. cin >> numer >> K;
  14.  
  15. vector<string> grupy_liter;
  16. for (char cyfra : numer) {
  17. grupy_liter.push_back(litery[cyfra - '0']);
  18. }
  19.  
  20. string wynik;
  21. int n = grupy_liter.size();
  22. string aktualnaKombinacja(n, ' ');
  23.  
  24. function<void(int, long long&)> backtrack = [&](int index, long long &licznik) {
  25. if (index == n) {
  26. licznik++;
  27. if (licznik == K) {
  28. wynik = aktualnaKombinacja;
  29. }
  30. return;
  31. }
  32.  
  33. for (char litera : grupy_liter[index]) {
  34. aktualnaKombinacja[index] = litera;
  35. backtrack(index + 1, licznik);
  36.  
  37. if (!wynik.empty()) return;
  38. }
  39. };
  40.  
  41. long long licznik = 0;
  42. backtrack(0, licznik);
  43. cout << wynik << endl;
  44. return 0;
  45. }
  46.  
Success #stdin #stdout 0.01s 5284KB
stdin
8353366
 458
stdout
TELEFON