페이지

1722번: 순열의 순서

https://www.acmicpc.net/problem/1722


#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;
}

댓글 없음 :

댓글 쓰기