Cod sursa(job #1480575)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 2 septembrie 2015 20:12:13
Problema Farfurii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <stdio.h>
#define MAX 100005

int n, i, sol[MAX], viz[MAX];
long long k, t;

long long val(int k){
	return 1LL * (n - k) * (n - k + 1) / 2;
}

void comp(int k);

int main(){
	freopen("farfurii.in", "r", stdin);
	freopen("farfurii.out", "w", stdout);
	scanf("%d%lld", &n, &k);
	for(i = 1; i <= n; i++){
		if(i == n){
			sol[i] = n;
			viz[i] = 1;
			continue;
		}

		t = val(i + 1);
		if(t > k){
			sol[i] = i;
			viz[i] = 1;
		}
		else{
			sol[i] = i + k - t;
			viz[i + k - t] = 1;
			comp(i + 1);
			break;
		}
	}

	for(i = 1; i <= n; i++)
		printf("%d ", sol[i]);
	return 0;
}

void comp(int k){
	int i, v = n;
	for(i = k; i <= n; i++){
		while(viz[v])
			v--;
		sol[i] = v;
		viz[v] = 1;
	}
}