Cod sursa(job #219606)

Utilizator alexeiIacob Radu alexei Data 7 noiembrie 2008 18:35:50
Problema Farfurii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<stdio.h>

inline long long f(const long long a)
{
       return (a*(a-1))>>1;       
}

void show_N(const long long pos,const long long N)
{
     long long i;
     for(i=1; i<pos; ++i)
              printf("%lld ",i);
     for(i=N; i>=pos; --i)
              printf("%lld ",i);
     printf("\n");
}

void show_C(const long long pos,const long long N,const long long K)
{    
     long long i,aux=N-pos;
     for(i=1; i<aux; ++i)
              printf("%lld ",i);
     
     aux=N-(f(pos+1)-K);
     if( aux )
     printf("%lld ",aux);
     
     for(i=N; i>aux; --i)
              printf("%lld ",i);
              
     for(i=aux-1; i>=N-pos; --i)
              printf("%lld ",i); 
     printf("\n");
}
int main()
{
    freopen("farfurii.in","r",stdin);
    freopen("farfurii.out","w",stdout);
    
    long long K,N;
    scanf("%lld%lld",&N,&K);
    
    long long i,j;
    for(i=1; i<N; i*=2);
    for(j=1; i; i/=2)
             if( j+i==N || f(j+i)<=K )
             j+=i; 
    
    if( j==K )
    show_N(N-j,N);
    else
    show_C(j,N,K);
    
    return 0;
}