Untitled

2
 avatar
unknown
plain_text
a year ago
1.0 kB
7
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int ans = 0;

void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

bool is_beautiful(int* perm, int n, int k) {
    int count = 0;
    for (int i = 0; i < n - 1; i++) {
        if (perm[i] > perm[i + 1]) {
            count++;
        }
    }
    return count <= k;
}

void getperms(int* perm, int start, int n, int k) {
    if (start == n) {
        if (is_beautiful(perm, n, k)) {
            ans++;
        }
    } else {
        for (int i = start; i < n; i++) {
            swap(&perm[start], &perm[i]);
            getperms(perm, start + 1, n, k);
            swap(&perm[start], &perm[i]);
        }
    }
}

int main() {
    int n, k;
    scanf("%d %d", &n, &k);

    int* perm = (int*)malloc(sizeof(int) * n);
    for (int i = 0; i < n; i++) {
        perm[i] = i + 1;
    }

    getperms(perm, 0, n, k);
    printf("%d\n", ans);

    free(perm);
    return 0;
}
Editor is loading...
Leave a Comment