Pagini recente » Cod sursa (job #1039893) | Cod sursa (job #2218123) | Cod sursa (job #2374237) | Cod sursa (job #524665) | Cod sursa (job #517503)
Cod sursa(job #517503)
#include <cstdio>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
#define nmax 50101
#define file_in "semne.in"
#define file_out "semne.out"
long long A,S;
int N,V[nmax];
char semn[nmax];
vector<int> plus;
vector<int> minus;
int X,XX;
int main(){
srand(time(NULL));
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %%ld", &N, &S);
for (int i=1;i<=N;++i){
scanf("%d", &V[i]);
if (A+V[i]>S){
minus.push_back(i);
A-=V[i];
semn[i]=0;
}
else{
plus.push_back(i);
A+=V[i];
semn[i]=1;
}
}
while(A!=S){
if (A>S){
X=rand()%plus.size();
XX=plus[X];
A-=(V[XX]<<1);
plus[X]=plus[plus.size()-1];
plus.pop_back();
minus.push_back(XX);
semn[XX]=0;
}
else{
X=rand()%minus.size();
XX=minus[X];
A+=(V[XX]<<1);
minus[X]=minus[minus.size()-1];
minus.pop_back();
plus.push_back(XX);
semn[XX]=1;
}
}
for (int i=1;i<=N;++i)
if (semn[i])
printf("+");
else
printf("-");
return 0;
}