Guest User

Untitled

a guest
Jul 22nd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. Input:
  2. 2
  3. 4 1 2
  4. 5 2 3
  5.  
  6. Output:
  7. 2
  8. 1
  9.  
  10. #include <iostream>
  11. #include <iterator>
  12. #include <list>
  13.  
  14. int josephus(int num_students, int start_index, int steps)
  15. {
  16. std::list<int> students;
  17.  
  18. for (auto i = 1; i <= num_students; ++i)
  19. {
  20. students.push_back(i);
  21. }
  22.  
  23. std::list<int>::iterator it = students.begin();
  24. for (auto i = 1; i < start_index; ++i)
  25. {
  26. ++it;
  27. if (it == students.end())
  28. {
  29. it = students.begin();
  30. }
  31. }
  32.  
  33. int countdown = num_students - 1;
  34. while (countdown--)
  35. {
  36. for (auto i = 0; i < steps; ++i)
  37. {
  38. ++it;
  39. if (it == students.end())
  40. {
  41. it = students.begin();
  42. }
  43. }
  44.  
  45. if (it != students.begin())
  46. {
  47. it = students.erase(it);
  48. --it;
  49. }
  50. else
  51. {
  52. students.erase(it);
  53. it = students.end();
  54. --it;
  55. }
  56. }
  57.  
  58. return *it;
  59. }
  60.  
  61. int main() {
  62. int num_tests;
  63. std::cin >> num_tests;
  64.  
  65. while (num_tests--)
  66. {
  67. int num_students; // formerly n
  68. int start_index; //formerly m
  69. int steps; //formerly o
  70. std::cin >> num_students >> start_index >> steps;
  71.  
  72. std::cout << josephus(num_students, start_index, steps) << 'n';
  73. }
  74. }
  75.  
  76. #include <iostream>
  77.  
  78. int josephus(int num_students, int steps) {
  79. if (num_students == 1)
  80. {
  81. return 1;
  82. }
  83. else
  84. {
  85. /* The position returned by josephus(n - 1, k) is adjusted because the
  86. recursive call josephus(n - 1, k) considers the original position
  87. k % n + 1 as position 1 */
  88. return (josephus(num_students - 1, steps) + steps - 1) % num_students + 1;
  89. }
  90. }
  91.  
  92. int main() {
  93. int num_tests;
  94. std::cin >> num_tests;
  95.  
  96. while (num_tests--)
  97. {
  98. int num_students; // formerly n
  99. int start_index; //formerly m
  100. int steps; //formerly o
  101. std::cin >> num_students >> start_index >> steps;
  102.  
  103. int answer = josephus(num_students, steps);
  104.  
  105. answer = (answer + start_index) % num_students;
  106.  
  107. if (answer != 0) {
  108. std::cout << answer << 'n';
  109. }
  110. else
  111. {
  112. std::cout << num_students << 'n';
  113. }
  114. }
  115. }
Add Comment
Please, Sign In to add comment