Cod sursa(job #1077028)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 10 ianuarie 2014 20:18:49
Problema Farfurii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<cstdio>
#include<vector>
#include<algorithm>

using namespace std;

long long N;
long long M;

void solve(long long N, long long M);

int main() {
	freopen("farfurii.in","r",stdin) ;
	freopen("farfurii.out","w",stdout) ;
	scanf("%lld %lld", &N, &M);
	//while (N != -1 && M != -1) {
		solve(N, M);
	//	scanf("%d %d", &N, &M);
	//}
	//while (1);
	return 0;
}

void solve(long long N, long long M) {
	long long i, nr = 0, pos, z;
	vector <int> V;
	V.resize(N + 1);
	for (i = 1; i <= N; ++i) {
		V[i] = i;
	}
	if (M >= 1) {
		pos = N;
		for (i = 2; i <= N; ++i) {
			nr += i - 1;
			--pos;
			if (nr >= M) break;
		}
		if (pos == 1) {
			reverse(V.begin() + 1, V.end());
			pos = nr - M + 1;
			for (i = pos; i > 1; --i) {
				swap(V[i], V[i - 1]);
			}
		}
		else {
			reverse(V.begin() + pos, V.end());
			i = pos + (nr - M);
			while (i > pos) {
				swap(V[i], V[i - 1]);
				--i;
				--nr;
			}
		}
	}
	printf("%d", V[1]);
	for (i = 2; i <= N; ++i) {
		printf(" %d", V[i]);
	}
	printf("\n");

}