Cod sursa(job #1409322)

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