fork download
  1. printf <- function(...) cat(sprintf(...))
  2.  
  3. ithDuplicatedPermutation <- function(n, m, i)
  4. {
  5. c <- rep(m, n)
  6.  
  7. N <- n * m
  8. a <- integer(N)
  9.  
  10. P <- factorial(N) / factorial(m) ^ n
  11.  
  12. for (j in 1:N) {
  13. for (k in 1:n) {
  14. if (!c[k]) next
  15. p <- P * c[k] / (N - j + 1)
  16. if (i <= p) {
  17. a[j] <- k
  18. c[k] <- c[k] - 1
  19. P <- p
  20. break
  21. }
  22. i <- i - p
  23. }
  24. }
  25.  
  26. a
  27. }
  28.  
  29. for (n in c(1, 2, 3, 123456, 234567, 369600)) {
  30. printf("入力: %s\n", n)
  31. printf("出力: [%s]\n\n", toString(ithDuplicatedPermutation(4, 3, n)))
  32. }
Success #stdin #stdout 0.34s 41148KB
stdin
Standard input is empty
stdout
入力: 1
出力: [1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4]

入力: 2
出力: [1, 1, 1, 2, 2, 2, 3, 3, 4, 3, 4, 4]

入力: 3
出力: [1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 3, 4]

入力: 123456
出力: [2, 2, 2, 3, 3, 1, 4, 3, 4, 1, 1, 4]

入力: 234567
出力: [3, 2, 4, 4, 2, 4, 3, 3, 1, 1, 1, 2]

入力: 369600
出力: [4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1]