Pagini recente » Cod sursa (job #2303554) | Cod sursa (job #1807512) | Cod sursa (job #2763052) | Cod sursa (job #1595392) | Cod sursa (job #820293)
Cod sursa(job #820293)
#include <cstdio>
#include <ctime>
#include <cstdlib>
const int MAX_SIZE(50000);
int numbers [MAX_SIZE];
int minus [MAX_SIZE], minus_index;
int plus [MAX_SIZE], plus_index;
char sign [MAX_SIZE + 1];
int n;
long long sum, s;
inline void read (void)
{
std::freopen("semne.in","r",stdin);
std::scanf("%d%lld",&n,&s);
bool init(false);
for (int index(0) ; index < n ; ++index)
{
std::scanf("%d",&numbers[index]);
if (init)
{
sign[index] = '+';
plus[plus_index] = index;
++plus_index;
sum += numbers[index];
}
else
{
sign[index] = '-';
minus[minus_index] = index;
++minus_index;
sum -= numbers[index];
}
init = !init;
}
--plus_index;
--minus_index;
std::fclose(stdin);
}
inline void print (void)
{
std::freopen("semne.out","w",stdout);
std::printf("%s\n",sign);
std::fclose(stdout);
}
inline void generate (void)
{
std::srand(std::time(0));
int index;
while (sum != s)
if (sum > s)
{
if (plus_index)
index = std::rand() % (plus_index + 1);
else
index = 0;
sum -= numbers[plus[index]] << 1;
sign[plus[index]] = '-';
++minus_index;
minus[minus_index] = plus[index];
plus[index] = plus[plus_index];
--plus_index;
}
else
{
if (minus_index)
index = std::rand() % (minus_index + 1);
else
index = 0;
sum += numbers[minus[index]] << 1;
sign[minus[index]] = '+';
++plus_index;
plus[plus_index] = minus[index];
minus[index] = minus[minus_index];
--minus_index;
}
}
int main (void)
{
read();
generate();
print();
return 0;
}