Cod sursa(job #29894)

Utilizator thestickTudor A thestick Data 11 martie 2007 18:42:35
Problema Semne Scor 15
Compilator c Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#include <math.h>
long n,s,x[50001],ss=0;
int sign[50001];

void init()
{
srandom(84282);
}

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]);
//sign[i]=random()%2;
sign[i]=i%2;
if(sign[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(sign[i]==0)
fprintf(f,"-");
else fprintf(f,"+");
fprintf(f,"\n");
fclose(f);
}

void rez()
{
long i;

while(s!=ss)
{
i=random()%n;

if(sign[i]==0)
        {
                if (  abs(s-ss-2*x[i])  <  abs(s-ss)  )
                        {
                                ss+=2*x[i];
                                sign[i]=1;
                        }
        }

        
else
        {
                if (  abs(s-ss+2*x[i]) <  abs(s-ss)  )
                        {
                                ss-=2*x[i];
                                sign[i]=0;
                        }
        }

}

}


int main()
{
init();
cit();
rez();
tip();
return 0;
}