fork download
  1. library(gmp)
  2.  
  3. printf <- function(...) cat(sprintf(...))
  4.  
  5. ithDuplicatedPermutationInv <- function(a)
  6. {
  7. N <- length(a)
  8. i <- as.bigz(1)
  9.  
  10. a <- as.integer(factor(a))
  11. c <- table(a)
  12.  
  13. P <- factorial(as.bigz(N)) %/% prod(factorial(as.bigz(c)))
  14.  
  15. for (j in 1:N) {
  16. k <- a[j]
  17. if (k > 1) i <- i + (P * sum(c[1:(k - 1)])) %/% (N - j + 1)
  18. P <- (P * c[k]) %/% (N - j + 1)
  19. c[k] <- c[k] - 1
  20. }
  21.  
  22. i
  23. }
  24.  
  25. Q <- list(
  26. c(1, 2, 3, 4, 5, 6, 7, 8, 9),
  27. c(1, 2, 3, 4, 5, 6, 7, 9, 8),
  28. c(1, 2, 3, 4, 5, 6, 8, 7, 9),
  29. c(9, 8, 7, 6, 5, 4, 3, 2, 1),
  30. NULL,
  31. c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4),
  32. c(1, 1, 1, 2, 2, 2, 3, 3, 4, 3, 4, 4),
  33. c(1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 3, 4),
  34. c(2, 2, 2, 3, 3, 1, 4, 3, 4, 1, 1, 4),
  35. c(3, 2, 4, 4, 2, 4, 3, 3, 1, 1, 1, 2),
  36. c(4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1),
  37. NULL,
  38. c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5),
  39. c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 4, 5, 5),
  40. c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 4, 5),
  41. c(1, 1, 1, 3, 3, 3, 4, 4, 2, 5, 4, 5, 2, 2, 5),
  42. c(1, 1, 1, 4, 3, 5, 5, 3, 5, 4, 4, 2, 2, 2, 3),
  43. c(1, 1, 1, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2),
  44. c(5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1),
  45. NULL,
  46. c(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,
  47. 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),
  48. c(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,
  49. 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),
  50. c(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,
  51. 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),
  52. c(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,
  53. 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),
  54. c(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,
  55. 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),
  56. c(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,
  57. 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),
  58. NULL,
  59. c(3, 1, 4, 1, 5, 9)
  60. )
  61.  
  62. for (q in Q) {
  63. if (length(q)) {
  64. printf("入力: [%s]\n", toString(q))
  65. printf("出力: %s\n", format(ithDuplicatedPermutationInv(q)))
  66. }
  67. printf("\n")
  68. }
Success #stdin #stdout #stderr 0.38s 43896KB
stdin
Standard input is empty
stdout
入力: [1, 2, 3, 4, 5, 6, 7, 8, 9]
出力: 1

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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


入力: [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]
出力: 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, 10, 9, 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, 10, 9, 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, 9, 9, 10, 10, 8, 8, 9, 8, 8, 9, 10, 10, 10, 9]
出力: 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, 10, 10, 9, 8, 8, 9, 10, 10, 8, 9, 10, 9, 8, 9]
出力: 234567

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


入力: [3, 1, 4, 1, 5, 9]
出力: 127

stderr
Attaching package: ‘gmp’

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

    %*%, apply, crossprod, matrix, tcrossprod