Herowaree

This is the end

Apr 10th, 2023
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. #include <vector>
  2. #include <cstdio>
  3.  
  4. void print_vec(std::vector<int> vec) {
  5. for (auto counter = 0; counter < vec.size(); ++counter) {
  6. printf("%d ", vec[counter]);
  7. }
  8.  
  9. printf("\n");
  10. }
  11.  
  12. void multiple_champion(int N, int k, int m) {
  13. std::vector<int> vec;
  14. for(auto counter = 0; counter < N; ++counter) {
  15. vec.push_back(counter + 1);
  16. }
  17.  
  18. int tmp_right, index_right = 0;
  19. int tmp_left, index_left = vec.size();
  20.  
  21. while(vec.size() > 0) {
  22. //print_vec(vec);
  23.  
  24. //index_right = (index_right + k - 1) % vec.size();
  25.  
  26. if ((index_right + k - 1) > vec.size()) {
  27. index_right = (index_right + k) - vec.size();
  28. } else {
  29. index_right = index_right + k - 1;
  30. }
  31.  
  32. if ((index_left - m) < 0) {
  33. // printf("%lu - (%d - %d)\n", vec.size(), index_left, m);
  34. index_left = vec.size() + (index_left - m);
  35. } else {
  36. index_left = (index_left - m) % vec.size();
  37. }
  38.  
  39. if (index_left == index_right) {
  40. //printf(" %d", vec[index_right]);
  41. printf("Both: Removing the employee %d (index: %d)\n", vec[index_right], index_right);
  42. vec.erase(vec.begin() + index_right);
  43.  
  44. if (!vec.empty()) {
  45. //printf(",");
  46. }
  47. } else { // Not removing the same employee
  48. if (index_right < index_left) {
  49. index_left--;
  50. }
  51.  
  52. if (vec.empty()) return;
  53.  
  54. //printf(" %d", vec[index_right]);
  55. printf("Right: Removing the employee %d (index: %d)\n", vec[index_right], index_right);
  56. vec.erase(vec.begin() + index_right);
  57.  
  58. if (vec.empty()) {
  59. return;
  60. }
  61.  
  62. //printf(" %d", vec[index_left]);
  63. printf("Left: Removing the employee %d (index: %d)\n", vec[index_left], index_left);
  64. vec.erase(vec.begin() + index_left);
  65.  
  66. //printf(",");
  67. }
  68. }
  69.  
  70. printf("\n");
  71. }
  72.  
  73. int main(){
  74. int N, k, m;
  75.  
  76. scanf("%d %d %d", &N, &k, &m);
  77.  
  78. multiple_champion(N, k, m);
  79.  
  80. return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment