Cod sursa(job #1779721)

Utilizator preda.andreiPreda Andrei preda.andrei Data 15 octombrie 2016 16:14:41
Problema Farfurii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <fstream>
#include <vector>

#include <iostream>

using namespace std;

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

	long long n, k;
	fin >> n >> k;

	vector<int> perm(n + 1);
	for (int i = 1; i <= n; ++i)
		perm[i] = i;

	for (int i = 1; i < n && k > 0; ++i) {
		long long len = n - i;
		if (len * (len - 1) / 2 >= k)
			continue;

		int poz = i + 1;
		long long len2 = n - i - 1;

		while (len2 * (len2 - 1) / 2  + poz - i < k) {
			++poz;
			++len2;
		}
		k -= poz - i;

		while (poz != i) {
			swap(perm[poz], perm[poz - 1]);
			--poz;
		}
	}

	for (int i = 1; i <= n; ++i)
		fout << perm[i] << " ";
	return 0;
}