Cod sursa(job #1249871)

Utilizator cojocarugabiReality cojocarugabi Data 27 octombrie 2014 16:46:32
Problema Semne Scor 90
Compilator cpp Status done
Runda Lista lui wefgef Marime 0.85 kb
# include <bits/stdc++.h>
using namespace std;
ifstream fi("semne.in");
ofstream fo("semne.out");
const int nmax = 100005;
int a[nmax],s[nmax],v[nmax];
bool b[nmax];
int x,y;
int main(void)
{
    int n,s1,Sum=0;
    fi >> n >> s1;
    srand(time(NULL));
    for (int i=1,ok;i<=n;++i)
    {
          ok = rand() % 2;fi>>a[i];
          if (ok) s[++x]=i,Sum+=a[i];
          else Sum-=a[i],v[++y]=i;
    }
    int p;
    while (Sum != s1)
    if (Sum < s1)
    {
        assert(y);
        p = rand() % y;++p;
        s[++x]=v[p];
        Sum+=2 * a[v[p]];
        swap(v[p],v[y--]);
    }
    else
    {
        assert(x);
        p = rand() % x;++p;v[++y]=s[p];
        Sum-=2 * a[s[p]];
        swap(s[p],s[x--]);
    }
    for (int i=1;i<=x;++i) b[s[i]]=1;
    for (int i=1;i<=n;++i) fo << (b[i] ? '+':'-');
    return 0;
}