Cod sursa(job #1409326)

Utilizator akaprosAna Kapros akapros Data 30 martie 2015 14:42:48
Problema Farfurii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
long long n,i,j;
long long m,st,dr,mij,k;
int main()
{
    freopen("farfurii.in","r",stdin);
    freopen("farfurii.out","w",stdout);
    scanf("%lld %lld",&n,&k);
    st=1; dr=n*1LL;
    while (st<=dr)
    {
        mij=(st+dr)/2;
        if ((mij*(mij-1)*1LL)/2==k)
        {m=mij; break;}
        if ((mij*(mij-1)*1LL)/2<=k)
        {m=max(mij,m); st=mij+1;}
        else dr=mij-1;
    }
    if (k==(m*(m-1))/2)
    {
        for (i=1;i<=n-m;i++)
        printf("%lld ",i);
        for (i=n;i>=n-m+1;i--)
        printf("%lld ",i);
        return 0;
    }
    for (i=1;i<=n-m-1;i++) if (i!=n-(((m+1)*m)/2-k))
    printf("%lld ",i);
    printf("%lld %lld ",n-(((m+1)*m)/2-k),n);
    for (i=n-1;i>=n-m;i--) if (i!=n-(((m+1)*m)/2-k))
    printf("%lld ",i);
    return 0;
}