mthPartition <- function(n, m)
{
A <- matrix(0, n, n)
A[1, 1:min(n, 5)] <- 1
if (n > 1) for (i in 2:n) for (j in 1:n) A[i, j] <- sum(A[i - 1, pmax(j - 1:5, 0)])
for (L in 1:n) {
if (m <= A[L, n]) break
ifelse(L < n, m <- m - A[L, n], return(0))
}
a <- integer(L)
for (i in 1:L) {
for (j in 1:5) {
if (i < L) {
if (m <= A[L - i, n - j]) break
m <- m - A[L - i, n - j]
} else {
if (j == n) break
}
}
a[i] <- j
n <- n - j
}
paste(a, collapse = "")
}
Q <- list(
c(2, 1), c(2, 2), c(2, 3),
c(20, 1), c(20, 2), c(20, 3), c(20, 400096), c(20, 400097),
c(32, 1), c(32, 2), c(32, 3), c(32, 1000), c(32, 1000000), c(32, 1000000000), c(32, 1333610936), c(32, 1333610937)
)
for (q in Q
) cat
(sprintf("(%d, %d) → %s\n", q
[1], q
[2], mthPartition
(q
[1], q
[2])))
bXRoUGFydGl0aW9uIDwtIGZ1bmN0aW9uKG4sIG0pCnsKICAgIEEgPC0gbWF0cml4KDAsIG4sIG4pCiAgICBBWzEsIDE6bWluKG4sIDUpXSA8LSAxCiAgICBpZiAobiA+IDEpIGZvciAoaSBpbiAyOm4pIGZvciAoaiBpbiAxOm4pIEFbaSwgal0gPC0gc3VtKEFbaSAtIDEsIHBtYXgoaiAtIDE6NSwgMCldKQoKICAgIGZvciAoTCBpbiAxOm4pIHsKICAgICAgICBpZiAobSA8PSBBW0wsIG5dKSBicmVhawogICAgICAgIGlmZWxzZShMIDwgbiwgbSA8LSBtIC0gQVtMLCBuXSwgcmV0dXJuKDApKQogICAgfQoKICAgIGEgPC0gaW50ZWdlcihMKQogICAgZm9yIChpIGluIDE6TCkgewogICAgICAgIGZvciAoaiBpbiAxOjUpIHsKICAgICAgICAgICAgaWYgKGkgPCBMKSB7CiAgICAgICAgICAgICAgICBpZiAobSA8PSBBW0wgLSBpLCBuIC0gal0pIGJyZWFrCiAgICAgICAgICAgICAgICBtIDwtIG0gLSBBW0wgLSBpLCBuIC0gal0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChqID09IG4pIGJyZWFrCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGFbaV0gPC0gagogICAgICAgIG4gPC0gbiAtIGoKICAgIH0KCiAgICBwYXN0ZShhLCBjb2xsYXBzZSA9ICIiKQp9CgpRIDwtIGxpc3QoCiAgICBjKDIsIDEpLCBjKDIsIDIpLCBjKDIsIDMpLAogICAgYygyMCwgMSksIGMoMjAsIDIpLCBjKDIwLCAzKSwgYygyMCwgNDAwMDk2KSwgYygyMCwgNDAwMDk3KSwKICAgIGMoMzIsIDEpLCBjKDMyLCAyKSwgYygzMiwgMyksIGMoMzIsIDEwMDApLCBjKDMyLCAxMDAwMDAwKSwgYygzMiwgMTAwMDAwMDAwMCksIGMoMzIsIDEzMzM2MTA5MzYpLCBjKDMyLCAxMzMzNjEwOTM3KQopCgpmb3IgKHEgaW4gUSkgY2F0KHNwcmludGYoIiglZCwgJWQpIOKGkiAlc1xuIiwgcVsxXSwgcVsyXSwgbXRoUGFydGl0aW9uKHFbMV0sIHFbMl0pKSk=