Cod sursa(job #481398)

Utilizator ooctavTuchila Octavian ooctav Data 31 august 2010 15:56:26
Problema Farfurii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

const int NMAX = 100005;

long long N, K, M;
long long perm[NMAX];

void citire()
{
	cin >> N >> K;
}

void afla_m()
{
	while(1)
	{
		if(M * (M - 1) / 2 >= K)
			return;
		M++;
	}
}

void rearanjeaza()
{
	for(int i = 1 ; i <= N ; i++)
		perm[i] = i;
	int inc = N - M + 1, sfa = N;
	while(inc < sfa)
	{
		swap(perm[inc], perm[sfa]);
		inc++;sfa--;
	}
	
	long long dif = (M * (M - 1) / 2) - K, prov = perm[N - M + 1];
	for(int i = N - M + 2 ; i <= N - M + 1 + dif ; i++)
		swap(prov, perm[i]);
	
	perm[N - M + 1] = prov;
}

void scrie()
{
	for(int i = 1 ; i <= N ; i++)
		printf("%lld ", perm[i]);
}

int main()
{
	freopen("farfurii.in", "r", stdin);
	freopen("farfurii.out", "w", stdout);
	citire();
	afla_m();
	rearanjeaza();
	scrie();
	return 0;
}