Cod sursa(job #1217595)

Utilizator smaraldaSmaranda Dinu smaralda Data 7 august 2014 19:36:38
Problema Farfurii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<stdio.h>
#include<math.h>

#define LL long long

const int NMAX = 1e5;

int f[NMAX + 5], p[NMAX + 5];

int main() {
    freopen("farfurii.in", "r", stdin);
    freopen("farfurii.out", "w", stdout);
    int n, k, i, j, pos, dif;

    scanf("%d%d", &n, &k);

    pos = sqrt(2 * k);
    if((LL)pos * (pos - 1) < (LL)2 * k)
        ++ pos;
    if(((LL)pos - 1) * (pos - 2) >= (LL)2 * k)
        -- pos;
    
    dif = k - ((LL)pos - 1) * ((LL)pos - 2) / 2;
    pos = n - pos + 1;
    for(i = 1; i < pos; ++ i)
        p[i] = i;

    p[pos] = pos + dif;
    k = n;
    for(i = pos + 1; i <= n; ++ i, -- k) {
        if(k == p[pos])
            -- k;
        p[i] = k;
    }
     
    for(i = 1; i <= n; ++ i)
        printf("%d ", p[i]);
    return 0;
}