Pagini recente » Cod sursa (job #303143) | Cod sursa (job #25059) | Cod sursa (job #31696) | Cod sursa (job #31723) | Cod sursa (job #401887)
Cod sursa(job #401887)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define FIN "semne.in"
#define FOUT "semne.out"
#define NMAX 50000
using namespace std;
int a[NMAX],n,p[NMAX],ng[NMAX],sgn[NMAX],sum,S;
int main()
{
srand(time(NULL));
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d %d",&n,&S);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(sum<S)
{
sum+=a[i];
p[++p[0]]=i;
sgn[i]=1;
}
else
{
sum-=a[i];
ng[++ng[0]]=i;
}
}
while(sum!=S)
{
if(sum<S)
{int x=rand()%(ng[0])+1;
sum+=2*a[ng[x]];
sgn[ng[x]]=1;
p[++p[0]]=ng[x];
ng[x]=ng[ng[0]];
ng[0]--;
}
else
{int x=rand()%(p[0])+1;
sum-=2*a[p[x]];
sgn[p[x]]=0;
ng[++ng[0]]=p[x];
p[x]=p[p[0]];
p[0]--;
}}
for(int i=1;i<=n;i++)
if(sgn[i]) printf("+");
else printf("-");
return 0;
}