Pagini recente » Cod sursa (job #2059928) | Cod sursa (job #2892495) | Cod sursa (job #1819987) | Cod sursa (job #178845) | Cod sursa (job #13544)
Cod sursa(job #13544)
#include <stdio.h>
#define INF "farfurii.in"
#define OUF "farfurii.out"
#define NMAX 131072
int main()
{
int n,k,i,j,aux,p,q,mij,nr,sol[NMAX];
FILE *in,*out;
in=fopen(INF,"r");
out=fopen(OUF,"w");
fscanf(in,"%d %d",&n,&k);
p=1;q=n;
while(p<=q)
{
mij=(p+q)/2;
aux=mij*(mij-1)/2;
if(aux<k) p=mij+1;
else if(aux>k) q=mij-1;
else break;
}
while((mij*(mij-1)/2)>=k) mij--;
while((mij*(mij-1)/2)<k) mij++;
q=mij*(mij-1)/2;
mij=n-mij;
//printf("%d",mij);
for(i=1;i<=mij;i++) sol[i]=i;
nr=n;
for(i=mij+1;i<=n;i++) {sol[i]=nr;nr--;}
//q=mij*(mij-1)/2;
p=q-k+mij+1;
// printf("%d \n",p);
aux=sol[p];
for(i=p;i>mij+1;i--) sol[i]=sol[i-1];
sol[mij+1]=aux;
for(i=1;i<=n;i++) fprintf(out,"%d ",sol[i]);
fclose(in);fclose(out);
return 0;
}