Pagini recente » Cod sursa (job #300968) | Cod sursa (job #1241278) | Cod sursa (job #2327213) | Cod sursa (job #1961308) | Cod sursa (job #501334)
Cod sursa(job #501334)
#include<cstdlib>
#include<ctime>
#include<cstdio>
#include<iostream>
using namespace std;
const int NMAX = 50005;
long long N, S;
long long A[NMAX];
int p[NMAX], m[NMAX];
long long sum = 0;
void citire()
{
cin >> N >> S;
for(int i = 1 ; i <= N ; i++)
{
cin >> A[i];
if(sum < S)
{
sum += A[i];
p[++p[0]] = i;
}
else
{
sum += A[i] = -A[i];
m[++m[0]] = i;
}
}
}
inline long long modul(long long x)
{
if(x > 0)
return x;
return -x;
}
void obtine()
{
srand(time(0));
while(sum != S)
{
if(sum < S)
{
int x = rand() % m[0] + 1;
A[m[x]] *= -1;
sum += 2 * A[m[x]];
p[++p[0]] = m[x];
m[x] = m[m[0]--];
}
else
{
int x = rand() % p[0] + 1;
A[p[x]] *= -1;
sum += 2 * A[p[x]];
m[++m[0]] = p[x];
p[x] = p[p[0]--];
}
}
}
void scrie()
{
for(int i = 1 ; i <= N ; i++)
if(A[i] > 0)
printf("+");
else
printf("-");
}
int main()
{
freopen("semne.in", "r", stdin);
freopen("semne.out", "w", stdout);
citire();
obtine();
scrie();
return 0;
}