Pagini recente » Cod sursa (job #3123571) | Cod sursa (job #174) | Cod sursa (job #3283326) | Cod sursa (job #3282774) | Cod sursa (job #32237)
Cod sursa(job #32237)
#include <stdio.h>
#include <math.h>
long n,s,x[50001],ss=0;
int y[50001];
void init()
{
srandom(time(0));
}
void cit()
{
FILE *f;
long i;
f=fopen("semne.in","r");
fscanf(f,"%d %d",&n,&s);
for(i=0;i<n;i++)
{
fscanf(f,"%d",&x[i]);
if(s>ss)y[i]=1;
else if(s<ss)y[i]=0;
else y[i]=random()%2;
if(y[i]==1) ss+=x[i];
else ss-=x[i];
}
fclose(f);
}
void tip()
{
FILE *f;
long i;
f=fopen("semne.out","w");
for(i=0;i<n;i++)
if(y[i]==0)
fprintf(f,"-");
else fprintf(f,"+");
fprintf(f,"\n");
fclose(f);
}
void rez()
{
long i,fl,ct=0;
while(s!=ss)
{
fl=0;i=random()%n;
if(y[i]==0)
{
if ( abs(s-ss-2*x[i]) <= abs(s-ss) )
{ ss+=2*x[i];
y[i]=1;
fl=1; }
}
else
{
if ( abs(s-ss+2*x[i]) <= abs(s-ss) )
{ ss-=2*x[i];
y[i]=0;
fl=1; }
}
if(fl==0)ct++;
if(ct==n/2)
{
ss+=(y[i]==0)*(x[i])-(y[i]==1)*(x[i]);
y[i]=1-y[i];
ct=0;
}
}
}
int main()
{
init();
cit();
rez();
tip();
return 0;
}