Pagini recente » Cod sursa (job #1805200) | Cod sursa (job #1353264) | Cod sursa (job #2673555) | Cod sursa (job #1467487) | Cod sursa (job #50869)
Cod sursa(job #50869)
#include <stdio.h>
#include <stdlib.h>
#include <fstream.h>
#include <string.h>
#include <iostream.h>
long long S, sum;
int N;
char semn[50010];
int A[50010];
char buffer[1000001];
//using namespace std;
int main()
{
// freopen("semne.in", "rt", stdin);
ifstream fin("semne.in");
freopen("semne.out", "wt", stdout);
// FILE *fin = fopen("semne.in", "rt");
// FILE *fout = fopen("semne.out", "wt");
int i = 0, v;
double r;
srand( time(0) );
fin >> N >> S;// scanf("%d %lld", &N, &S);
fin.get();
fin.read(buffer, 1000001);
int len = strlen(buffer), nr = 0, cnt = 0;
for (i = 0; i < len; i++)
if (buffer[i] == ' ')
{
A[++cnt] = nr;
nr = 0;
}
else
if (buffer[i] != '\n')
nr = nr * 10 + (buffer[i] - '0');
A[++cnt] = nr;
for (i = 1; i <= N; i++)
{
// scanf("%d", &A[i]);
//if (v == 0) sum += A[i];
//else sum -= A[i], semn[i] = 1;
sum += A[i];
semn[i-1] = '+';
//r = ( (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
//printf("%d", (int)(r * (double)N) + 1);
}
fin.close();
// fclose(fin);
while (S != sum)
{
if (S < sum)
{
r = ( (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
v = (int)(r * (double)N) + 1;
while (semn[v-1] == '-')
{
r = ( (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
v = (int)(r * (double)N) + 1;
}
semn[v-1] = '-';
sum -= 2*A[v];
}
if (S > sum)
{
r = ( (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
v = (int)(r * (double)N) + 1;
while (semn[v-1] == '+')
{
r = ( (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
v = (int)(r * (double)N) + 1;
}
semn[v-1] = '+';
sum += 2*A[v];
}
}
printf("%s", semn);
// fclose(fout);
return 0;
}