Cod sursa(job #3134840)

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

long long R[100005];

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

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

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

    int dif = N - nums;

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

        long long 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("%lld ", R[i]);
    }
    printf("\n");

    return 0;
}