Cod sursa(job #3134836)

Utilizator lilian_ciobanuLilian Ciobanu lilian_ciobanu Data 31 mai 2023 14:36:39
Problema Farfurii Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <math.h>
#include <stdio.h>

int R[100005];

int main() {
    freopen("farfurii.in", "r", stdin);
    freopen("farfurii.out", "w", stdout);

    int N, K;
    scanf("%d %d", &N, &K);

    int param = 8 * K + 1, nums = sqrt(param);
    if (nums * nums != param) {
        nums = nums + 1;
    }
    nums = (nums + 2) >> 1;

    int dif = N - nums;

    for (int n = nums, k = K, r = 0; k > 0; n--, r++) {
        R[r] = k;

        int pred = ((n - 1) * (n - 2)) / 2;

        if (k - pred == n - 1) {
            k = pred;
        } else {
            k = pred - (n - 2) + (k - pred);
        }
    }

    R[nums - 1] = 1 + dif;
    for (int i = nums - 2, n = 1; i >= 0; i--, n++) {
        if (R[i] == ((n * (n + 1)) / 2)) {
            R[i] = n + 1 + dif;
        } else {
            R[i] = R[i + 1];
            R[i + 1] = n + 1 + dif;
        }
    }

    for (int i = 1; i <= dif; i++) {
        printf("%d ", i);
    }
    for (int i = 0; i < nums; i++) {
        printf("%d ", R[i]);
    }
    printf("\n");

    return 0;
}