Pagini recente » Cod sursa (job #177934) | Cod sursa (job #182977) | Cod sursa (job #141278) | Cod sursa (job #8146) | Cod sursa (job #609249)
Cod sursa(job #609249)
#include<stdio.h>
#include<cstdlib>
#include<ctime>
#define maxN 50005
FILE*f=fopen("semne.in","r");
FILE*g=fopen("semne.out","w");
int n,V1[maxN],Poz1[maxN],v1,V2[maxN],Poz2[maxN],v2,X[maxN],x,i;
long long s1,s2,S;
inline void swap ( int &a , int &b ){
int aux;
aux = a; a = b; b = aux;
}
int main () {
fscanf(f,"%d %lld",&n,&S);
for ( i = 0 ; i < n ; ++i ){
fscanf(f,"%d",&x);
if ( s1 <= s2 + S ){
V1[v1] = x; Poz1[v1] = i;
++v1;
X[i] = 1; s1 += x;
}
else{
V2[v2] = x; Poz2[v2] = i;
++v2;
X[i] = 0; s2 += x;
}
}
srand(time(0));
while ( s1 != s2 + S ){
if ( s1 > s2 + S ){
x = rand() % v1; s1 -= V1[x]; s2 += V1[x];
X[Poz1[x]] = 0;
V2[v2] = V1[x]; Poz2[v2] = Poz1[x];
++v2;
swap(V1[x],V1[v1-1]);
swap(Poz1[x],Poz1[v1-1]);
--v1;
}
else{
x = rand() % v2; s1 += V2[x]; s2 -= V2[x];
X[Poz2[x]] = 1;
V1[v1] = V2[x]; Poz1[v1] = Poz2[x];
++v1;
swap(V2[x],V2[v2-1]);
swap(Poz2[x],Poz2[v2-1]);
--v2;
}
}
for ( i = 0 ; i < n ; ++i ){
if ( X[i] )
fprintf(g,"+");
else
fprintf(g,"-");
}
fclose(f);
fclose(g);
return 0;
}