Cod sursa(job #219623)

Utilizator alexeiIacob Radu alexei Data 7 noiembrie 2008 19:52:29
Problema Farfurii Scor 90
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))/2;       
}

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

void show_C(long long M,long long K,long long N)
{
     long long aux=f(M);
     long long X=aux-K;
     
     long long i,v1=N-M;
     for(i=1; i<=v1; ++i)
              printf("%lld ",i);
     printf("%lld ",N-X);
     for(i=N; i>N-X; --i)
              printf("%lld ",i);
     for(i=N-X-1; i>v1; --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,aux;
    
    for(i=1; i<=N; ++i)
    {
             aux=f(i);
             if( aux==K ){
             show_N(N-i,N);break;}
             else
             if( aux>K ){
             show_C(i,K,N);break;}
    }
    
    return 0;
}