Cod sursa(job #564126)

Utilizator tudorsTudor Siminic tudors Data 26 martie 2011 19:28:58
Problema Farfurii Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>
using namespace std;
long long n,k,M,i,x;
FILE *f, *g;
void caut_bin()
{
	int st,dr,mij;
	st=1;
	dr=n;
	while (st<=dr)
	{
		mij=(st+dr)/2;
		if (mij*(mij-1)/2<=k)
			st=mij+1;
		else
			dr=mij-1;
	}
	M=mij;
}
int main()
{
	f=fopen("farfurii.in","r");
	g=fopen("farfurii.out","w");
	fscanf(f,"%lld %lld",&n,&k);
	// se cauta binar M a.i.
	// m(m-1)/2 = K
	caut_bin();
	if (M*(M-1)/2==k)
	{
		for (i=1;i<=n-M;i++)
			fprintf(g,"%d ",i);
		for (i=0;i<M;i++)
			fprintf(g,"%d ",n-i);
	}
	else if (M*(M-1)/2>=k)
	{
		x=(long long)(M*(M-1)/2-k);
		for (i=1;i<=n-M;i++)
			fprintf(g,"%d ",i);
		fprintf(g,"%d ",n-x);
		for (i=0;i<M;i++)
			if (i!=x)
				fprintf(g,"%d ",n-i);
	}
	else
	{
		for (i=0;i<M;i++)
			fprintf(g,"%d ",n-i);
	}
	fclose(f);
	fclose(g);
	return 0;
}