Pagini recente » Cod sursa (job #3284992) | Borderou de evaluare (job #1973485) | Cod sursa (job #853446) | Cod sursa (job #480181) | Cod sursa (job #14694)
Cod sursa(job #14694)
#include <cstdio>
#include <time.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
#define Nmax 50005
int n;
long long s;
int sir[Nmax], tip[Nmax];
void citire()
{
int i;
scanf("%d %lld\n", &n, &s);
for (i=1; i<=n; ++i)
scanf("%d ", &sir[i]);
}
void solve()
{
int i;
long long suma = 0, sum, tmp;
srand(time(0));
reverse(sir+1, sir+n+1);
for (i=1; i<=n; ++i)
suma += sir[i];
tmp = suma;
do
{
sum = s;
suma = tmp;
for (i=1; i<=n; ++i)
{
if (sum + sir[i] > suma - sir[i])
tip[i] = 1;
else if (sum - sir[i] < - suma + sir[1])
tip[i] = -1;
else if (sum + sir[i] > suma - sir[i] && sum - sir[i] < - suma + sir[1])
{
sum = -1;
return;
}
else
tip[i] = 1 - (2 * (rand() % 2));
if (tip[i] == 1)
sum -= sir[i];
else sum += sir[i];
suma -= sir[i];
}
}
while (sum);
reverse(tip+1, tip+n+1);
for (i=1; i<=n; ++i)
if (tip[i] == 1)
printf("+");
else
printf("-");
}
int main()
{
freopen("semne.in", "r", stdin);
freopen("semne.out", "w", stdout);
citire();
solve();
return 0;
}