Cod sursa(job #23145)

Utilizator the1dragonIonita Alexandru the1dragon Data 28 februarie 2007 11:28:34
Problema Farfurii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>
#include<math.h>

int main()
{
    freopen("farfurii.in", "r", stdin);
    freopen("farfurii.out", "w", stdout);
    int n, r, i, j;
    long long k, a, b, m=1;
    scanf("%d%lld", &n, &k);
    
    if (k==0)
    {
       for (i=1; i<=n; i++)
            printf("%d ", i);
      
       return 0;
    }
    a=1; b=k;
      
    while (a!=b)
    {
          m=(b-a)/2+a;
          if (m*(m+1)/2<k) a=m;
          else b=m;
          if (m*(m+1)/2==k) a=b;
          if ((m*(m+1)/2<k) &&((m+1)* (m+2)/2>k)) a=b;        
    }
    
    i=m; 
    //for (i=(int)sqrt(k); i*(i+1)/2<=k; i++);
    //i--;
    r=k-i*(i+1)/2;
    for (j=1; j<=n-i-2; j++)
        printf("%d ", j);
    if (r==0) {printf("%d ", j); for (j=n; j>n-i-1; j--) printf("%d ", j);}
    else {r=i+1-r; printf("%d ", n-r);  for (j=n; j>n-i-2; j--)
                                            if (j!=n-r) printf("%d ", j);}
      
    return 0;
}