Cod sursa(job #3250491)

Utilizator dariustgameTimar Darius dariustgame Data 21 octombrie 2024 13:24:23
Problema Farfurii Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <cmath>

using namespace std;

ifstream fin("farfurii.in");
ofstream fout("farfurii.out");

long long n, m;

long long cautareBinara(long long st, long long dr)
{
	if (st >= dr)
	{
		return st;
	}
	long long mij = (st + dr) / 2;
	if ((mij * (mij - 1)) / 2 == m)
	{
		return mij;
	}
	else if ((mij * (mij - 1)) / 2 < m)
	{
		return cautareBinara(mij + 1, dr);
	}
	else
	{
		return cautareBinara(st, mij);
	}
}

int main()
{
	fin >> n >> m;
	long long maxx = sqrt(m);
	long long x = cautareBinara(1, maxx + 10);
	if (x * (x - 1) / 2 == m)
	{
		for (long long i = 1; i <= n - x; i++)
		{
			fout << i << ' ';
		}
		for (long long i = n; i > n - x; i--)
		{
			fout << i << ' ';
		}
	}
	else
	{
		long long aux = (x - 1) * (x - 2) / 2;
		aux = m - aux;
		for (long long i = 1; i <= n - x; i++)
		{
			fout << i << ' ';
		}
		fout << n - x + aux + 1 << ' ';
		for (long long i = n; i > n - x; i--)
		{
			if (i != n - x + aux + 1)
			{
				fout << i << ' ';
			}
		}
	}
}