Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <cstdio>
- void print_vec(std::vector<int> vec) {
- for (auto counter = 0; counter < vec.size(); ++counter) {
- printf("%d ", vec[counter]);
- }
- printf("\n");
- }
- void multiple_champion(int N, int k, int m) {
- std::vector<int> vec;
- for(auto counter = 0; counter < N; ++counter) {
- vec.push_back(counter + 1);
- }
- int tmp_right, index_right = 0;
- int tmp_left, index_left = vec.size();
- while(vec.size() > 0) {
- //print_vec(vec);
- //index_right = (index_right + k - 1) % vec.size();
- if ((index_right + k - 1) > vec.size()) {
- index_right = (index_right + k) - vec.size();
- } else {
- index_right = index_right + k - 1;
- }
- if ((index_left - m) < 0) {
- // printf("%lu - (%d - %d)\n", vec.size(), index_left, m);
- index_left = vec.size() + (index_left - m);
- } else {
- index_left = (index_left - m) % vec.size();
- }
- if (index_left == index_right) {
- //printf(" %d", vec[index_right]);
- printf("Both: Removing the employee %d (index: %d)\n", vec[index_right], index_right);
- vec.erase(vec.begin() + index_right);
- if (!vec.empty()) {
- //printf(",");
- }
- } else { // Not removing the same employee
- if (index_right < index_left) {
- index_left--;
- }
- if (vec.empty()) return;
- //printf(" %d", vec[index_right]);
- printf("Right: Removing the employee %d (index: %d)\n", vec[index_right], index_right);
- vec.erase(vec.begin() + index_right);
- if (vec.empty()) {
- return;
- }
- //printf(" %d", vec[index_left]);
- printf("Left: Removing the employee %d (index: %d)\n", vec[index_left], index_left);
- vec.erase(vec.begin() + index_left);
- //printf(",");
- }
- }
- printf("\n");
- }
- int main(){
- int N, k, m;
- scanf("%d %d %d", &N, &k, &m);
- multiple_champion(N, k, m);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment