Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<typename RandomIt>
- void MakeJosephusPermutation(RandomIt first, RandomIt last, uint32_t step_size)
- {
- list<typename RandomIt::value_type> pool;
- move(first, last, back_inserter(pool));
- size_t cur_pos = 0;
- size_t pred_pos = 0;
- auto it = pool.begin();
- while (!pool.empty())
- {
- for (size_t ind = pred_pos; ind < cur_pos; ++ind)
- {
- it++;
- if (it++ == pool.end()) it = pool.begin();
- }
- *(first++) = move(*it);
- pool.erase(it);
- if (pool.empty()) break;
- pred_pos = cur_pos;
- cur_pos = (cur_pos + step_size - 1) % pool.size();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement