Cod sursa(job #397960)

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

#define int long long
using namespace std;
const int NMax = 50010;

long long Nr, S, sc;
int v[NMax], N[NMax], P[NMax];
vector <bool> B(NMax);

#define int int
int main () {
	freopen ("semne.in", "r", stdin);
	freopen ("semne.out", "w", stdout);
	
	#define int long long
	scanf ("%lld %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] = true;
		}
		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]] = true;
			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]] = false;
			sc -= 2*v[P[r]];
			N[++N[0]] = P[r];
			P[r] = P[P[0]];
			--P[0];
		}
	}
	
	for (long long i=1;i<=Nr;++i) {
		if (B[i]) {
			printf ("+");
		}
		else {
			printf ("-");
		}
	}
	
	return 0;
}