Advertisement
Dzham

Untitled

Apr 29th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <iterator>
  5. #include <unordered_map>
  6. #include <functional>
  7. #include <unordered_set>
  8. #include <string>
  9. #include <set>
  10. #include <utility>
  11. #include <stack>
  12.  
  13. void p(std::vector<int> v) {
  14. for (auto i : v) {
  15. std::cout << i << " ";
  16. }
  17. std::cout << '\n';
  18. }
  19.  
  20. int main() {
  21. int N;
  22. std::cin >> N;
  23. std::vector<long long> result(N, 100000000);
  24. result[0] = 1;
  25. std::vector<long long> ways(N, 0);
  26. for (long long i = 1; i < N; i++) {
  27. if (result[i] >= result[i - 1] + 1) {
  28. result[i] = result[i - 1] + 1;
  29. ways[i] = i;
  30. }
  31. if ((i + 1) % 3 == 0 && (result[i] >= result[(i + 1) / 3 - 1] + 1)) {
  32. result[i] = result[(i + 1) / 3 - 1];
  33. ways[i] = (i + 1) / 3;
  34. }
  35. if ((i + 1) % 2 == 0 && (result[i] >= result[(i + 1) / 2 - 1] + 1)) {
  36. result[i] = result[(i + 1) / 2 - 1];
  37. ways[i] = (i + 1) / 2;
  38. }
  39. }
  40. std::vector<long long> res;
  41. int M = ways[N - 1];
  42. int D = N - 1;
  43. while (D + 1 != 1) {
  44. res.push_back(D + 1);
  45. D = ways[D] - 1;
  46. }
  47. std::cout << res.size() << '\n';
  48. std::cout << 1;
  49. for (int i = res.size() - 1; i > -1; i--) {
  50. std::cout << " " << res[i];
  51. }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement