Advertisement
Guest User

Untitled

a guest
Dec 13th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.92 KB | None | 0 0
  1. Permutation pow(int degree) const {
  2. if (degree == 0)
  3. return Permutation(degree);
  4. if (degree < 0)
  5. return inverse().pow(-degree);
  6. Permutation ans(size);
  7. bool *pos = new bool[size];
  8. int *circle = new int[size];
  9. for (unsigned int i = 0; i < size; i++)
  10. pos[i] = true;
  11. for (unsigned int i = 0; i < size; i++)
  12. if (pos[i]) {
  13. unsigned int len = 0;
  14. unsigned int begin = i;
  15. do {
  16. pos[begin] = false;
  17. circle[len++] = permutation[begin];
  18. begin = permutation[begin];
  19. } while (begin != i);
  20. for (unsigned int j = 0; j < len; j++)
  21. ans.permutation[circle[j]] = circle[(j + degree) % len];
  22. }
  23. delete[] pos;
  24. delete[] circle;
  25. return ans;
  26. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement