Pagini recente » Cod sursa (job #449233) | Cod sursa (job #1422982) | Cod sursa (job #1666380) | Cod sursa (job #2179239) | Cod sursa (job #395378)
Cod sursa(job #395378)
#include <cstdio>
#include <cstdlib>
#include <ctime>
#define NMAX 50010
int N, V[NMAX], poz[NMAX], neg[NMAX], A[NMAX];
long long S;
int main()
{
freopen("semne.in","r",stdin);
freopen("semne.out","w",stdout);
scanf("%d %lld",&N,&S);
int i;
long long s=0;
for (i=1; i<=N; i++)
{
scanf("%d",&A[i]);
if (s<S)
{
s+=A[i];
poz[++poz[0]]=i;
V[i]=1;
} else
{
s-=A[i];
neg[++neg[0]]=i;
}
}
srand (time (NULL));
while (s!=S)
{
if (s<S)
{
int p =rand() % neg[0] +1;
V[neg[p]]=1;
s+=2*A[neg[p]];
poz[poz[0]++]=neg[p];
neg[p]=neg[neg[0]];
neg[0]--;
} else
{
int p=rand() % poz[0] +1 ;
V[poz[p]]=0;
s-=2*A[poz[p]];
neg[neg[0]++]=poz[p];
poz[p]=poz[poz[0]];
poz[0]--;
}
}
for (i=1; i<=N; i++)
if (V[i]) printf("+"); else printf("-");
}