Cod sursa(job #2060276)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 8 noiembrie 2017 01:00:28
Problema Semne Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <bits/stdc++.h>

#define MaxN 50005
#define MOD 666013
#define INF 2140000000

using namespace std;

FILE *IN,*OUT;

long long S=0,Q;
int v[MaxN],N,p[MaxN];
bool sign[MaxN];
int main()
{
    IN=fopen("semne.in","r");
    OUT=fopen("semne.out","w");

    srand(time(NULL));

    fscanf(IN,"%d%lld",&N,&Q);

    for(int i=1;i<=N;i++)
        fscanf(IN,"%d",&v[i]),p[i]=i;
    random_shuffle(p+1,p+1+N);
    for(int i=1;i<=N;i++)
    {
        if(S>Q)
            S-=v[p[i]];
        else S+=v[p[i]],sign[p[i]]=1;
    }

    int pos=1;
    random_shuffle(p+1,p+1+N);
    while(S!=Q)
    {
        while(sign[p[pos]]&&S<Q)
        {
            pos++;
            if(pos>N)
                pos=1,random_shuffle(p+1,p+1+N);
        }
        while(!sign[p[pos]]&&S>Q)
        {
            pos++;
            if(pos>N)
                pos=1,random_shuffle(p+1,p+1+N);
        }
        if(sign[pos])
            S-=v[pos]<<1;
        else S+=v[pos]<<1;
        sign[pos++]^=1;
    }

    for(int i=1;i<=N;i++)
    {
        if(sign[i])fprintf(OUT,"+");
        else fprintf(OUT,"-");
    }
    return 0;
}