Cod sursa(job #397971)

Utilizator toniobFMI - Barbalau Antonio toniob Data 17 februarie 2010 19:41:32
Problema Semne Scor 5
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.91 kb
#include <cstdio>
#include <cstdlib>
#include <ctime>

using namespace std;
const int NMax = 100000;

long long S, sc;
int Nr, v[NMax], N[NMax], P[NMax], B[NMax];

int main () {
	freopen ("semne.in", "r", stdin);
	freopen ("semne.out", "w", stdout);
	
	scanf ("%d%lld", &Nr, &S);
	
	for (int i=1; i<=Nr; ++i) {
		scanf ("%d", &v[i]);
		if (sc<S) {
			P[++P[0]] = v[i];
			sc += v[i];
			B[i] = 1;
		}
		else {
			N[++N[0]] = v[i];
			sc -= v[i];
		}
	}
	
	srand(time(NULL));
	
	while (sc!=S) {
		if (sc<S) {
			int r = rand()%N[0]+1;
			B[N[r]] = 1;
			sc += 2*v[N[r]];
			P[++P[0]] = N[r];
			N[r] = N[N[0]];
			--N[0];
		}
		else {
			int r = rand()%P[0]+1;
			B[P[r]] = 0;
			sc -= 2*v[P[r]];
			N[++N[0]] = P[r];
			P[r] = P[P[0]];
			--P[0];
		}
	}
	
	for (int i=1;i<=Nr;++i) {
		if (B[i]) {
			printf ("+");
		}
		else {
			printf ("-");
		}
	}
	
	return 0;
}