Pagini recente » Cod sursa (job #1385555) | Cod sursa (job #2310055) | Cod sursa (job #1470277) | Cod sursa (job #1747738) | Cod sursa (job #1045103)
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
int N,v[50005],poz[50005],neg[50005];
long long S,suma;
char semn[50005];
inline void Read()
{
int i;
ifstream fin("semne.in");
fin>>N>>S;
for(i=1;i<=N;++i)
{
fin>>v[i];
if(suma<S)
{
semn[i]='+';
suma+=v[i];
poz[++poz[0]]=i;
}
else
{
semn[i]='-';
suma-=v[i];
neg[++neg[0]]=i;
}
}
fin.close();
}
inline void Solve()
{
int gata=0,i,pozitie;
srand(time(0));
while(!gata)
if(suma<S)
{
pozitie=rand()%neg[0] +1;
suma+=2*v[neg[pozitie]];
semn[neg[pozitie]]='+';
poz[++poz[0]]=neg[pozitie];
neg[pozitie]=neg[neg[0]--];
}
else
if(suma>S)
{
pozitie=rand()%poz[0] +1;
suma-=2*v[poz[pozitie]];
semn[poz[pozitie]]='-';
neg[++neg[0]]=poz[pozitie];
poz[pozitie]=poz[poz[0]--];
}
else
gata=1;
ofstream fout("semne.out");
for(i=1;i<=N;i++)
fout<<semn[i];
fout<<"\n";
fout.close();
}
int main()
{
Read();
Solve();
return 0;
}