Cod sursa(job #1886046)

Utilizator tqmiSzasz Tamas tqmi Data 20 februarie 2017 16:54:29
Problema Semne Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstdlib>
#include <ctime>
#define Nmax 50005
using namespace std;

ifstream fin("semne.in");
ofstream fout("semne.out");

vector <int> P;
vector <int> M;

int N,Num[Nmax],sign[Nmax];
long long S,sum;
void read()
{
    fin>>N>>S;
    for(int i=1;i<=N;i++)
    {
        fin>>Num[i];
        if(sum<S)
        {
            sign[i]=1;
            P.push_back(i);
            sum+=Num[i];
        }
        else
        {
            M.push_back(i);
            sum-=Num[i];
        }
    }
}

void solve()
{
    while(sum!=S)
    {
        if(sum<S)
        {
            int index=rand()%M.size();
            sign[M[index]]=1;
            sum+=2*Num[M[index]];
            P.push_back(M[index]);
            M[index]=M[M.size()-1];
            M.pop_back();
        }
        else
        {
            int index=rand()%P.size();
            sign[P[index]]=0;
            sum-=2*Num[P[index]];
            M.push_back(P[index]);
            P[index]=P[P.size()-1];
            P.pop_back();
        }
    }
}

void print()
{
    for(int i=1;i<=N;i++)
        if(sign[i])
            fout<<"+";
        else
            fout<<"-";
}
int main()
{
    srand(time(0));
    read();
    solve();
    print();
    return 0;
}