Pagini recente » Cod sursa (job #2776944) | Cod sursa (job #1523044) | Cod sursa (job #1166960) | Rating bogdan horia-daniel (falselight) | Cod sursa (job #785249)
Cod sursa(job #785249)
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <vector>
using namespace std;
#define pb push_back
#define ppb pop_back
int N, V[50010], semn[50010];
long long S, crtS;
vector<int> A, B;
int main()
{
freopen("semne.in", "r", stdin);
freopen("semne.out", "w", stdout);
srand(time(0));
int i;
scanf("%i %lld", &N, &S);
for(i = 1; i <= N; i++)
{
scanf("%i", &V[i]);
if(crtS + V[i] > S)
{
crtS -= V[i];
semn[i] = -1;
B.pb(i);
}else
{
crtS += V[i];
semn[i] = 1;
A.pb(i);
}
}
while(crtS != S)
{
if(crtS > S)
{
int pos = rand() % A.size();
crtS -= 2 * V[A[pos]];
B.pb(A[pos]);
semn[A[pos]] = -1;
A[pos] = A[A.size() - 1];
A.ppb();
}else
{
int pos = rand() % B.size();
crtS += 2 * V[B[pos]];
A.pb(B[pos]);
semn[B[pos]] = 1;
B[pos] = B[B.size() - 1];
B.ppb();
}
}
for(i = 1; i <= N; i++)
printf("%c", (semn[i] == 1 ? '+' : '-'));
return 0;
}