Cod sursa(job #2322510)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 17 ianuarie 2019 20:42:40
Problema Semne Scor 100
Compilator cpp-64 Status done
Runda Lista lui wefgef Marime 0.84 kb
	
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;
const int MAX_N = 50000;
int p[MAX_N + 5];
int m[MAX_N + 5];
int v[MAX_N + 5];
char s[MAX_N + 5];
int main() {
  srand(time(NULL));
  freopen("semne.in", "r", stdin);
  freopen("semne.out", "w", stdout);
  int N;
  scanf("%d", &N);
  long long S;
  scanf("%lld", &S);
  long long sum = 0;
  int n1 = 0, n2 = 0;
  for (int i = 1; i <= N; ++i) {
    scanf("%d", &v[i]);
    s[i] = '+';
    p[++n1] = i;
    sum += v[i];
  }
  while (sum != S) {
    if (sum >= S) {
      int poz = rand() % n1 + 1;
      m[++n2] = p[poz];
      p[poz] = p[n1--];
      sum -= 2 * v[m[n2]];
      s[m[n2]] = '-';
    } else {
      int poz = rand() % n2 + 1;
      p[++n1] = m[poz];
      m[poz] = m[n2--];
      sum += 2 * v[p[n1]];
      s[p[n1]] = '+';
    }
  }
  printf("%s", s + 1);
  return 0;
}