Pagini recente » Cod sursa (job #2447361) | Cod sursa (job #2539463) | Cod sursa (job #1041682) | Cod sursa (job #733678) | Cod sursa (job #920585)
Cod sursa(job #920585)
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<algorithm>
#define NMAX 50005
FILE *f=fopen("semne.in","r");
FILE *g=fopen("semne.out","w");
using namespace std;
int plus[NMAX],minus[NMAX],v[NMAX],semn[NMAX];
int poz,nrp,nrm,n;
long long sum,S;
int main( void )
{
fscanf(f,"%d%d",&n,&S);
for(int i(1); i <= n ; ++i)
{
fscanf(f,"%d",&v[i]);
sum+=(long long )v[i];
plus[++nrp]=i;
semn[i]=1;
}
fclose(f);
srand(time(NULL));
while( sum != S)
{
if(sum > S)
{
poz=rand()%nrp+1;
sum-=2*v[plus[poz]];
semn[plus[poz]]=-1;
minus[++nrm]=plus[poz];
swap(plus[poz],plus[nrp]);
--nrp;
}
else
{
poz=rand()%nrm+1;
sum+=2*v[minus[poz]];
semn[minus[poz]]=1;
plus[++nrp]=minus[poz];
swap(minus[poz],minus[nrm]);
--nrm;
}
}
for(int i(1); i <= n ; i++)
if(semn[i] == 1)
fprintf(g,"+");
else
fprintf(g,"-");
fclose(g);
return 0;
}