Pagini recente » Cod sursa (job #1874099) | Cod sursa (job #1330061) | Cod sursa (job #1418358) | Cod sursa (job #2712200) | Cod sursa (job #2901220)
// Nu las comentarii in cod de obicei, dar acum simt nevoia sa explic :)
/*
Problema se reduce la gasirea unei permutari cu K inversiuni.
Pentru fiecare numar pe care-l fixam,
dupa el putem avea combinari de 'fixat' luate cate 2 si combinari de 'fixat' - 1 luate cate 2 inversiuni.
Odata gasit 'fixat', putem sa cautam numerele noastre.
*/
#include <fstream>
using namespace std;
ifstream in("farfurii.in");
ofstream out("farfurii.out");
long long N, K, fixat, rest, poz, i;
int main()
{
in >> N >> K;
for(;fixat * (fixat + 1) / 2 < K; ++fixat);
for(i = 1; i <= N - fixat - 1; ++i)
out << i << " ";
rest = fixat * (fixat + 1) / 2 - K;
out << N - rest << " ";
for(int j = N; j >= i; --j)
if(j != N - rest)
out << j << " ";
return 0;
}