π‘ 쑰건
- 1λΆν° NκΉμ§μ μλ₯Ό μμλ‘ λ°°μ΄ν μμ΄μ μ΄ N! = NΓ(N-1)Γβ¦Γ2Γ1 κ°μ§κ° μλ€.
- μμμ μμ΄μ μ λ ¬μ ν μ μλ€.
μλ₯Ό λ€μ΄ N=3μΈ κ²½μ° {1, 2, 3}, {1, 3, 2}, {2, 1, 3}, {2, 3, 1}, {3, 1, 2}, {3, 2, 1}μ μμλ‘ μκ°ν μ μλ€.
- Nμ΄ μ£Όμ΄μ§λ©΄, μλμ λ μλ¬Έμ μ€μ νλλ₯Ό νμ΄μΌ νλ€.
kκ° μ£Όμ΄μ§λ©΄ kλ²μ§Έ μμ΄μ ꡬνκ³ , μμμ μμ΄μ΄ μ£Όμ΄μ§λ©΄ μ΄ μμ΄μ΄ λͺ λ²μ§Έ μμ΄μΈμ§λ₯Ό μΆλ ₯νλ λ¬Έμ
- 첫째 μ€μ N(1 β€ N β€ 20)μ΄ μ£Όμ΄μ§λ€.
- 1μΈ κ²½μ° k(1 β€ k β€ N!)λ₯Ό μ
λ ₯λ°κ³ , 2μΈ κ²½μ° μμμ μμ΄μ λνλ΄λ Nκ°μ μλ₯Ό μ
λ ₯λ°λλ€.
Nκ°μ μμλ 1λΆν° NκΉμ§μ μ μκ° ν λ²μ©λ§ λνλλ€.
- μν, μ‘°ν©λ‘ μ νμ λ¬Έμ
π μμ λ° μ€νκ²°κ³Ό
μμ 1
4
1 3
μ€νκ²°κ³Ό 1
1 3 2 4
μμ 2
4
2 1 3 2 4
μ€νκ²°κ³Ό 2
3
β¨οΈ λ¬Έμ νμ΄
- Nμ΄ μ΅λ 20κΉμ§λΌλ©΄, λΈλ£¨νΈν¬μ€λ‘ νμ΄νμ λ μκ°λ³΅μ‘λκ° μ΅μ
μ κ²½μ° 20! = 2,432,902,008,176,640,000 κ°μ§μ κ²½μ°μ μκ° λμ¨λ€.
무쑰건 μκ°μ΄κ³Όκ° λ μ λ°μ μλ€.
- μ
λ ₯ μμ΄μ΄ λ§μ½ [3, 4, 1, 2]κ° μ
λ ₯λμλ€κ³ κ°μ ν΄λ³΄μ.
1λ‘ μμνλ [1, ?, ? ,?]μ κ°μ μμ΄μ κ²½μ°μ κ°μλ 3!μ΄λ€.
2λ‘ μμνλ [2, ?, ? ,?]μ κ°μ μμ΄μ κ²½μ°μ κ°μλ 3!μ΄λ€.
- μ
λ ₯μ λ°μ μμ΄μ 3μΌλ‘ μμνλ€. λ°λΌμ
[3, 1, ?, ?]λ‘ μμνλ μμ΄μ κ²½μ°μ κ°μλ 2!μ΄λ€.
[3, 2, ?, ?]λ‘ μμνλ μμ΄μ κ²½μ°μ κ°μλ 2!μ΄λ©°, 3λ λ§μ°¬κ°μ§μ΄λ€.
- μ΄ νμ κ°μλ [3, 4, 1, ?] 1κ°.
2λ² λΆν° 4λ²μ κ³Όμ μ λνλ©΄ λͺ λ²μ§Έ μμ΄μΈμ§ μ μκ° μλ€.
- μ΄μ κ°μ κ³Όμ μ λ°λλ‘ μ§ννλ©΄ Kλ²μ§Έ μμ΄μ μΆλ ₯ν μ μλ€.
π₯ μμ€ μ½λ
from sys import stdin
n = int(stdin.readline())
data = list(map(int, stdin.readline().split()))
cache = {}
def find_permutations(n):
if n in cache:
return cache[n]
elif n <= 1:
return 1
else:
cache[n] = n * find_permutations(n - 1)
return cache[n]
if data[0] == 1:
k = data[1]
arr = [x for x in range(1, n + 1)]
ans = []
for i in range(n):
x = find_permutations(n - 1 - i)
step = (k - 1) // x
ans.append(arr[step])
arr.remove(arr[step])
k -= x * step
print(*ans)
else:
input_permu = data[1:]
sort_permu = sorted(data[1:])
ans = 1
for i in range(n):
step = sort_permu.index(input_permu[i])
sort_permu.remove(input_permu[i])
x = find_permutations(n - 1 - i)
ans += x * step
print(ans)