Cod sursa(job #1233307)

Utilizator touristGennady Korotkevich tourist Data 25 septembrie 2014 09:11:17
Problema Semne Scor 35
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.2 kb
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <queue>
#define Nmax 50005

using namespace std;

queue <int> Minus,Plus;
int a[Nmax],sol[Nmax];

int main()
{
    int N,i,r,x;
    long long S,suma=0;
    srand(time(0));
    freopen ("semne.in","r",stdin);
    freopen ("semne.out","w",stdout);
    scanf("%d%lld", &N,&S);
    for(i=1;i<=N;++i)
    {
        scanf("%d", &a[i]);
        r=rand()%2;
        if(!r)
        {
            suma+=a[i];
            Plus.push(i);
        }
        else
        {
            suma-=a[i];
            Minus.push(i);
        }
    }
    while(suma!=S)
    {
        if(suma<S)
        {
            x=Minus.front(); Minus.pop();
            suma=suma+2*a[x]; Plus.push(x);
        }
        else
        {
            x=Plus.front(); Plus.pop();
            suma=suma-2*a[x]; Minus.push(x);
        }
    }
    while(!Minus.empty())
    {
        x=Minus.front(); Minus.pop();
        sol[x]=0;
    }
    while(!Plus.empty())
    {
        x=Plus.front(); Plus.pop();
        sol[x]=1;
    }
    for(i=1;i<=N;++i)
        if(!sol[i]) printf("-");
        else printf("+");
    printf("\n");
    return 0;
}