fork download
  1. #include <cassert>
  2. #include <iostream>
  3. #include <vector>
  4.  
  5.  
  6. bool CanReachEnd(std::vector<int> const & jumps)
  7. {
  8. assert(jumps.size() > 0);
  9. std::size_t current = jumps.size() - 1;
  10. std::size_t lowest_can_reach_end = current;
  11. while (true)
  12. {
  13. assert(jumps[current] >= 0);
  14. if (current + jumps[current] >= lowest_can_reach_end)
  15. {
  16. lowest_can_reach_end = current;
  17. }
  18. if (current == 0) break;
  19. current -= 1;
  20. }
  21. assert(current == 0);
  22. return (lowest_can_reach_end == 0);
  23. }
  24.  
  25. int main() {
  26. std::vector<int> jumps[] = {
  27. {1, 2, 1, 3, 0, 0, 2, 3, 1},
  28. {1, 2, 1, 2, 0, 0, 2, 3, 1},
  29. {0},
  30. {1},
  31. {0,1},
  32. {1,1}
  33. };
  34. for (auto const & j : jumps)
  35. {
  36. if (CanReachEnd(j))
  37. {
  38. std::cout << "Can reach end\n";
  39. }
  40. else
  41. {
  42. std::cout << "Cannot reach end\n";
  43. }
  44. }
  45. }
Success #stdin #stdout 0s 4412KB
stdin
Standard input is empty
stdout
Can reach end
Cannot reach end
Can reach end
Can reach end
Cannot reach end
Can reach end