#include<stdio.h> long long int N, P, K, data, ans, abc = 1, num, count[22]; bool check[22]; int main() { int i, j; scanf("%lld%lld", &N, &P); for (i = 2; i <= N; i++) { abc *= i; } if (P == 1) { scanf("%lld", &K); for (i = 1; i <= N; i++) { abc /= N - i + 1; for (j = 1; j <= N; j++) { if (check[j] == false) { num = j; break; } } while (K>abc) { K -= abc; for (j = num + 1; j <= N; j++) { if (check[j] == false) { num = j; break; } } } printf("%lld ", num); check[num] = true; } } else { for (i = 1; i <= N; i++) { abc /= N - i + 1; scanf("%d", &data); ans += (data - count[data] - 1)*abc; for (j = data; j <= N; j++) { count[j]++; } } printf("%lld", ans + 1); } return 0; }
1722번: 순열의 순서
https://www.acmicpc.net/problem/1722
피드 구독하기:
댓글
(
Atom
)
댓글 없음 :
댓글 쓰기