fork download
  1. library(gmp)
  2.  
  3. printf <- function(...) cat(sprintf(...))
  4.  
  5. ithDuplicatedPermutation <- function(n, m, i)
  6. {
  7. c <- rep(m, n)
  8.  
  9. N <- m * n
  10. a <- integer(N)
  11.  
  12. P <- factorial(as.bigz(N)) %/% factorial(as.bigz(m)) ^ n
  13.  
  14. for (j in 1:N) {
  15. for (k in 1:n) {
  16. if (!c[k]) next
  17. p <- (P * c[k]) %/% (N - j + 1)
  18. if (i <= p) {
  19. a[j] <- k
  20. c[k] <- c[k] - 1
  21. P <- p
  22. break
  23. }
  24. i <- i - p
  25. }
  26. }
  27.  
  28. a
  29. }
  30.  
  31. Q <- list(
  32. list(c(9, 1), list(1, 2, 3, 123456, 234567, 362880)),
  33. list(c(4, 3), list(1, 2, 3, 123456, 234567, 369600)),
  34. list(c(5, 3), list(1, 2, 3, 123456, 234567, 369600, 168168000)),
  35. list(c(10, 5), list(1, 2, 3, 123456, 234567, as.bigz("49120458506088132224064306071170476903628800")))
  36. )
  37.  
  38. for (q in Q) {
  39. n <- q[[1]][1]; m <- q[[1]][2]
  40. printf("【n = %d, m = %d】\n\n", n, m)
  41. for (i in q[[2]]) {
  42. printf("入力: %s\n", format(i))
  43. printf("出力: [%s]\n\n", toString(ithDuplicatedPermutation(n, m, i)))
  44. }
  45. printf("\n")
  46. }
Success #stdin #stdout #stderr 0.42s 44448KB
stdin
Standard input is empty
stdout
【n = 9, m = 1】

入力: 1
出力: [1, 2, 3, 4, 5, 6, 7, 8, 9]

入力: 2
出力: [1, 2, 3, 4, 5, 6, 7, 9, 8]

入力: 3
出力: [1, 2, 3, 4, 5, 6, 8, 7, 9]

入力: 123456
出力: [4, 1, 6, 5, 8, 9, 7, 3, 2]

入力: 234567
出力: [6, 8, 4, 7, 5, 3, 2, 1, 9]

入力: 362880
出力: [9, 8, 7, 6, 5, 4, 3, 2, 1]


【n = 4, m = 3】

入力: 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]


【n = 5, m = 3】

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

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

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

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

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

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

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


【n = 10, m = 5】

入力: 1
出力: [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10]

入力: 2
出力: [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 10, 9, 10, 10, 10, 10]

入力: 3
出力: [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 9, 10, 10, 10]

入力: 123456
出力: [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 9, 9, 10, 10, 8, 8, 9, 8, 8, 9, 10, 10, 10, 9]

入力: 234567
出力: [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 10, 10, 9, 8, 8, 9, 10, 10, 8, 9, 10, 9, 8, 9]

入力: 49120458506088132224064306071170476903628800
出力: [10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1]


stderr
Attaching package: ‘gmp’

The following objects are masked from ‘package:base’:

    %*%, apply, crossprod, matrix, tcrossprod