Pagini recente » Cod sursa (job #1374297) | Cod sursa (job #2138823) | Cod sursa (job #1764111) | Cod sursa (job #1026742) | Cod sursa (job #83094)
Cod sursa(job #83094)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <algorithm>
#define maxn 50001
#define fout out
FILE *in = fopen("semne.in","r"), *out = fopen("semne.out","w");
int a[maxn];
char semn[maxn];
int plus[maxn], k;
int minus[maxn], p;
int n;
long long s;
long long sol = 0;
void read()
{
fscanf(in, "%d %lld", &n, &s);
for ( int i = 1; i <= n; ++i )
{
fscanf(in, "%d", &a[i]);
if ( sol <= s )
{
plus[++k] = i;
sol += a[i];
semn[i] = 1;
}
else
{
minus[++p] = i;
sol -= a[i];
semn[i] = 0;
}
}
}
int main()
{
srand(time(0));
read();
int q = 0;
while ( sol != s )
{
if ( sol > s )
{
q = rand() % (k+1);
sol -= (a[ plus[q] ] << 1);
semn[ plus[q] ] = 0;
minus[++p] = plus[q];
plus[q] = plus[k--];
}
else
{
q = rand() % (p+1);
sol += (a[ minus[q] ] << 1);
semn[ minus[q] ] = 1;
plus[++k] = minus[q];
minus[q] = minus[p--];
}
}
for ( int i = 1; i <= n; ++i )
if ( semn[i] == 0 )
fprintf(fout, "-");
else
fprintf(fout, "+");
return 0;
}