Cod sursa(job #2326691)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 23 ianuarie 2019 21:19:13
Problema Semne Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

#define ll long long

const int MAXN = 5e4;

int a[MAXN + 1], sign[MAXN + 1];
vector <int> v[2];
int main() {
  int n, i;
  ll s, k;
  freopen ("semne.in", "r", stdin);
  freopen ("semne.out", "w", stdout);

  scanf ("%d%lld", &n, &k);

  s = 0;

  for (i = 1; i <= n; i++) {
    scanf ("%d", &a[i]);
    sign[i] = 1;
    v[0].push_back (i);
    s = s + a[i];
  }

  srand (NULL);

  while (k != s) {
    if (s < k) {
      i = rand () % v[1].size ();
      int j = v[1][i];
      s = s + 2 * a[j];
      sign[i] = 1;
      swap (v[1][i], v[1][v[1].size () - 1]);
      v[1].pop_back ();
      v[0].push_back (j);
    }
    else {
      i = rand () % v[0].size ();
      int j = v[0][i];
      s = s - 2 * a[j];
      swap (v[0][i], v[0][v[0].size () - 1]);
      v[0].pop_back ();
      v[1].push_back (j);
      sign[i] = -1;
    }
  }

  for (i = 1; i <= n; i++)
    printf ("%c", (sign[i] == 1) ? '+' : '-');

  return 0;
}