Pagini recente » Cod sursa (job #1911339) | Cod sursa (job #2488070) | Cod sursa (job #3252337) | Cod sursa (job #158511) | Cod sursa (job #1886046)
#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;
}